首先json的数据格式分为三种:数组、对象、数组对象混合
数组格式:
{"asd","qwe","ffe"}
对象格式:
{"a":1,"b":2,"c":3} 注意写代码中要加入转义字符\来获取双引号:\"
数组对象混合格式:
{ [
{"a":1,"b":2},
{"c":3,"d":4}
]
[
....
]
}
用Gson解析Json,如果是有对象格式,需要使用javabean来实现,代码如下:
1 //Object转换为对象 2 String str = "{\"data\":[{\"name\":sad,\"age\":18},{\"name\":ddd,\"age\":13}]}"; 3 Gson g = new Gson(); 4 ListPerson list = g.fromJson(str,ListPerson.class); 5 for (Person p:list.getList()){ 6 System.out.println("age:"+p.getAge()+" name:"+p.getName()); 7 }
因为是数组+对象的混合格式,需要两个javabean来实现,以下是javabean方面的代码:
1 static class Person{ 2 public String name ; 3 public int age; 4 public String getName() { 5 return name; 6 } 7 8 public void setName(String name) { 9 this.name = name; 10 } 11 12 public int getAge() { 13 return age; 14 } 15 16 public void setAge(int age) { 17 this.age = age; 18 } 19 } 20 21 static class ListPerson{ 22 List<Person> data ; 23 24 public List<Person> getList() { 25 return data; 26 } 27 28 public void setList(List<Person> list) { 29 this.data = list; 30 } 31 }
注意点:名字要一一对应,因为在json中我的数组名是data,所以在javabean中什么的变量名也要是data,以下是换了别的名字,控制台输出信息:
java.lang.NullPointerException
接下来是对象转换为json数据格式,代码如下:
1 Map<String,Integer> map = new HashMap<>(); 2 map.put("a",1); 3 map.put("b",2); 4 map.put("c",3); 5 System.out.println(new Gson().toJson(map));
如果在使用数组格式的json数据,要获取泛型类的类型,在gson中提供了一个方法
new TypeToken<List<Map.Entry<String,String>>>(){}.getType()
参考链接:https://www.jianshu.com/p/e740196225a4