JSON簡介
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,它基於JavaScript的一個子集,易於人的編寫和閱讀,也易於機器解析。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成爲理想的數據交換語言。
JAVA開發中使用GSON
因爲json有2種類型:
- 一種是對象,object -> {key:value,key:value,…} 。
- 另一種是數組,array -> [value,value,…] 。
所以針對這兩種類型,來展開對json數據的操作。GSON在解析json的時候,大體上有2種類型,一種是直接在內存中生成object或array,通過手工指定key來獲取值;另一種是藉助javabean來進行映射獲取值。我們主要採用第二種使用javabean來進行映射獲取。
1.對json進行反序列化得到java對象
通用示例
Gson gson = new Gson();
BeanType bean = gson.fronJson(jsonData, BeanType.class);
具體例子
Java實體類
package entity;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
利用User類來解析json
package jsontest;
import com.google.gson.Gson;
import entity.User;
public class JsonToObjectDemo {
public static void main(String[] args){
Gson gson = new Gson();
String jsonString = "{\"username\":\"tom\",\"password\":\"123456\"}";
System.out.println(jsonString);
User tom = gson.fromJson(jsonString,User.class);
System.out.println(tom.toString());
}
}
1.1如果字段名並不一致怎麼辦?
如果前端傳過來的json 數據的key和我們java類的字段不一致,就需要我們在java類中手工進行指定。
比如將username改成userName,這個時候我們可以使用@SerializedName("userName")
註解來實現。
public class User {
@SerializedName("userName")
private String username;
private String password;
}
1.2如果不想某些字段不參加序列化後者反序列化
如果想要讓java類的某些字段不參加序列化或反序列化,可以使用@Expose()
註解來實現
@Expose
@SerializedName("userName")
private String username;
@Expose(serialize = false,deserialize = false)
private String password;
利用Java數組來解析json數組
對於數組形式的json數據,我們還可以反序列化爲List類型的數組。因爲List進行增刪改都比較方便。
package jsontest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import entity.User;
import java.lang.reflect.Type;
import java.util.List;
public class JsonArrayToList {
public static void main(String[] args){
String jsonString = "[\n" +
" {\n" +
" \"username\": \"tom\",\n" +
" \"password\": \"123456\"\n" +
" },\n" +
" {\n" +
" \"username\": \"tony\",\n" +
" \"password\": \"1234567\"\n" +
" }\n" +
"]";
Gson gson = new Gson();
Type type = new TypeToken<List<User>>(){}.getType();
List<User> userList = gson.fromJson(jsonString,type);
}
}
2.由java對象序列化爲JSON
我們可以直接把java對象給序列化爲json數據。對於未設置的屬性,會採取默認值;但是如果默認是null的話,該屬性就不會被序列化。
package jsontest;
import com.google.gson.Gson;
import entity.User;
import java.util.ArrayList;
import java.util.List;
public class ListToJsonDemo {
public static void main(String[] args){
User tom = new User();
User tony = new User();
tom.setUsername("tom");
tom.setPassword("123456");
tony.setUsername("tony");
tony.setPassword("1234567");
List<User> userList = new ArrayList<>();
userList.add(tom);
userList.add(tony);
Gson gson = new Gson();
String jsonString = gson.toJson(userList);
System.out.println(jsonString);
}
}