json就是用来进行网络数据传输的一种格式,目前的使用很广泛,其格式就是一种键值对的形式,很方便进行解析。json有JsonObject和JsonArray两种形式,如何进行区分呢?
-凡是看到 { 就是一个JsonObject
-凡是看到 [ 就是一个JsonArray
Gson解析json方式:Gson是谷歌开发的一个用来解析json的库,简单好用。源码可见github而且里面还有详细的说明文档。首先需要根据json的格式来定义对应的bean。
1. 解析JsonObject:如下面的json,是一个JsonObeject类型。json使用:来分割一个键值对,使用,来分割不同的键值对。
{'name':'buder','age':'20'}
我们可以定义一个Person bean,其成员变量就是对应的key值:
public class Person {
public String name;
public Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
下面使用Gson解析成java bean对象:
private void transformStepOne() {
String json = "{'name':'buder','age':'20'}";
// 将json编译成对象
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
Log.e("Person Object", person.getName() + " " + person.getAge());
}
完成之后,这样我们就可以得到一个Person的类,里面的成员变量会被Gson自动写好数据。
2.JsonObject内部嵌套JsonObject:{'name':'buder','age':'20', 'address':{'postid':'473000'}}
这时需要改变Person类的结构,在Person内部嵌套一个Address的类即可:
public class Person {
private String name;
private Integer age;
private Address address = new Address();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public static class Address {
private String postid;
public String getPostid() {
return postid;
}
public void setPostid(String postId) {
this.postid = postId;
}
}
}
解析方式和第一种完全一致:
private void transformStepTwo() {
String json = "{'name':'buder','age':'20', 'address':{'postid':'473000'}}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
Log.e("Person Object", person.getAddress().getPostid());
}
解析结果:
Json数据格式如下:
{'name':'buder','age':'20', 'address':[{'postid':'100011'}, {'postid':'666999'}]}
我们只需要在Person类里面Address的类型改为List的即可。
Person数据结构:
public class Person {
private String name;
private Integer age;
private List address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List getAddress() {
return address;
}
public void setAddress(List address) {
this.address = address;
}
public static class Address {
private String postid;
public String getPostid() {
return postid;
}
public void setPostid(String postId) {
this.postid = postId;
}
}
}
解析方式和之前的保持一致:
private void transformStepThree() {
String json = "{'name':'buder','age':'20', 'address':[{'postid':'100011'}, {'postid':'666999'}]}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
Log.e("Person Object", person.getAddress().get(1).getPostid());
}
最终解析结果:
上面完整的解析可以参考GitHub,git中还添加了一个复杂的解析示例:
https://github.com/buder-cp/base_component_learn/tree/master/gsontest
参考文章:
https://mushuichuan.com/2016/02/24/gson/
https://576017120.iteye.com/blog/1245134