【JavaEE学习笔记】JSON解析_原生JSON,GSON,FastJSON
2017-11-19 21:11
351 查看
JSON解析
A.JSON介绍
1.概述
一种简单的数据格式,比xml更轻巧
是JS的原生格式,这意味着在JS中处理JSON数据不需要任何特殊的工具包
JSON采用完全独立于语言的文本格式,使JSON成为理想的数据交换语言
易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)、
是目前网络中主流的数据传输格式之一,应用十分广泛
2.JSON数据结构
a.对象(JsonObject)
表示"{}"括起来的内容,结构为:{key:value,key:value,...}键值对
key必须是String类型,value可以使任意数据类型
b.数组(JsonArray)
表示"[]"括起来的内容,是有序的,结构为[value,value...]的单值结构
3.JSON与XML的区别
JSON是一种取代XML的数据结构,和xml相比,更小巧,传输更快
4.下面数据用xml和JSON表示
a.xml
<?xml version="1.0" encoding="UTF-8"?>
<country>
<name>中国</name>
<provinces>
<province>
<pNname>河南</pNname>
</province>
<province>
<pNname>山西</pNname>
</province>
</provinces>
</country>
b.JSON
{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}
B.JSON
1.Jar包
JSON-lib包:是一个beans,collections,maps, arrays 和JSON互相转换的工具包
除了json-lib外还依赖
commons-lang
commons-beanutils
commons-collections
commons-logging
ezmorph
2.转换成对象
a.JSONObject.toBean(); json对象格式字符串转换成javabean
获取json对象指定属性值:String id = jsonObj.getString("id");
{'id':110,'name':'zhangsan','sex':'male','age':18}
1)JavaBean:Student
(分析JavaBean,解析的主要部分,成员变量名要和一样json对象一样)
package org.xxxx.json.bean;
public class Student {
private String id;
private String name;
private String sex;
private String age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String id, String name, String sex, String age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
2)转换测试类
package org.xxxx.json;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONObject;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串
String str = "{'id':110,'name':'zhangsan','sex':'male','age':18}";
// 转换为JSONObject对象
JSONObject jsonObject = JSONObject.fromObject(str);
// 转换为JavaBean
Student stu = (Student) JSONObject.toBean(jsonObject, Student.class);
// 输出
System.out.println(stu);
// 获取单个对象:id
String id = jsonObject.getString("id");
System.out.println("id = " + id);
}
}
b.JSONArray.toCollection();Json数组格式转换成对象
获取jsonArray中指定的jsonObject:JSONObject obj = array.getJSONObject(0);
测试代码
package org.xxxx.json;
import java.util.Collection;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
public class Demo02 {
public static void main(String[] args) {
// 定义字符串
String str = "[{'id':110,'name':'zhangsan','sex':'male','age':18},{'id':120,'name':'lisi','sex':'female','age':28}]";
// 转换为JSONOArray
JSONArray jsonArray = JSONArray.fromObject(str);
// 转换为集合对象
Collection<Student> c = JSONArray.toCollection(jsonArray, Student.class);
System.out.println(c);
// 获取第二个数组id:120
String id = jsonArray.getJSONObject(1).getString("id");
System.out.println("id = " + id);
}
}
c.混合式json解析,结合JSONObject和JSONArray里方法实现
{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}
测试代码
package org.xxxx.json;
import java.util.Collection;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Demo03 {
public static void main(String[] args) {
// 定义字符串
// 是个对象,us为键,值为数组
String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}";
// 转换为JSONObject
JSONObject fromObject = JSONObject.fromObject(str);
// 根据key获取JSONArray
JSONArray jsonArray = fromObject.getJSONArray("us");
// 转为集合
Collection<Student> c = jsonArray.toCollection(jsonArray, Student.class);
System.out.println(c);
}
}
d.JSONObject.toBean的时候如果转换的类中有集合
{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}
可以先定义Map<String, Class> map;
在map中put你要转换的类中的集合属性名和转换后类class
然后在toBean()的时候把参数加上
1)建一个Provinces Bean
package org.xxxx.json.bean;
public class Province {
private String pName;
public Province() {
super();
// TODO Auto-generated constructor stub
}
public Province(String pName) {
super();
this.pName = pName;
}
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
@Override
public String toString() {
return "Province [pName=" + pName + "]";
}
}
2)建一个Country Bean
package org.xxxx.json.bean;
import java.util.List;
public class Country {
private String name;
private List<Province> provinces;
public Country() {
super();
// TODO Auto-generated constructor stub
}
public Country(String name, List<Province> provinces) {
super();
this.name = name;
this.provinc
de6c
es = provinces;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Province> getProvinces() {
return provinces;
}
public void setProvinces(List<Province> provinces) {
this.provinces = provinces;
}
@Override
public String toString() {
return "Country [name=" + name + ", provinces=" + provinces + "]";
}
}
3)测试类
package org.xxxx.json;
import java.util.HashMap;
import java.util.Map;
import org.xxxx.json.bean.Country;
import org.xxxx.json.bean.Province;
import net.sf.json.JSONObject;
public class Demo04 {
public static void main(String[] args) {
// 定义字符串
// 一个对象:name和provinces为键,后者的值为一个集合
String str = "{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}";
// 转换为JSONObject
JSONObject fromObject = JSONObject.fromObject(str);
// 集合属性和其中的javabean对应关系
Map<String, Class<Province>> map = new HashMap<String, Class<Province>>();
map.put("provinces", Province.class);
// 转换为bean
Country cou = (Country) JSONObject.toBean(fromObject, Country.class);
System.out.println(cou);
}
}
3.对象转换成JSON
a.使用JSONObject.fromObject()方法;集合对象使用JSONArray.fromObject()方法
package org.xxxx.json;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Demo05 {
public static void main(String[] args) {
// 创建对象
Student stu = new Student("10", "张三", "男", "20");
// 转换成JSON
String str1 = JSONObject.fromObject(stu).toString();
System.out.println(str1);
// 创建集合
List<Student> list = new ArrayList<Student>();
// 添加集合
list.add(stu);
// 转换
String str2 = JSONArray.fromObject(list).toString();
System.out.println(str2);
}
}
b.使用JSONSerializer.toJSON()方法
package org.xxxx.json;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class Demo05 {
public static void main(String[] args) {
// 创建对象
Student stu = new Student("10", "张三", "男", "20");
// 转换成JSON
String str1 = JSONSerializer.toJSON(stu).toString();
System.out.println(str1);
// 创建集合
List<Student> list = new ArrayList<Student>();
// 添加集合
list.add(stu);
// 转换
String str2 = JSONSerializer.toJSON(list).toString();
System.out.println(str2);
}
}
C.GSON
1.概述
是Google提供的json转换jar
2.将json转换成bean
a.简单的object类型
{'name':'zhangsan','age':20}
package org.xxxx.gson;
import org.xxxx.gson.bean.Student;
import com.google.gson.Gson;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串
String str = "{'name':'zhangsan','age':20}";
// 创建Gson
Gson gson = new Gson();
// 转换 不用强转
Student stu = gson.fromJson(str, Student.class);
System.out.println(stu);
}
}
(注意:直接转换则成员属性的名称必须与Json数据的key一致)
b.解析结果为List
[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]
package org.xxxx.gson;
import java.lang.reflect.Type;
import java.util.List;
import org.xxxx.gson.bean.Student;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Demo02 {
public static void main(String[] args) {
// 定义字符串
String str = "[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]";
// 创建Gson
Gson gson = new Gson();
// 使用Type类型参数:告知返回集合中元素的类型
Type type = new TypeToken<List<Student>>(){}.getType();
// 转换
List<Student> list = gson.fromJson(str, type);
System.out.println(list);
}
}
c.{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}
package org.xxxx.gson;
import org.xxxx.gson.bean.Country;
import com.google.gson.Gson;
public class Demo03 {
public static void main(String[] args) {
// 定义字符串
String str = "{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}";
// 创建Gson
Gson gson = new Gson();
// 转换
Country c = gson.fromJson(str, Country.class);
System.out.println(c);
}
}
d.{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}
1)创建JavaBean,放集合
package org.xxxx.gson.bean;
import java.util.List;
public class StudentInfo {
private List<Student> us;
public StudentInfo() {
super();
// TODO Auto-generated constructor stub
}
public StudentInfo(List<Student> us) {
super();
this.us = us;
}
public List<Student> getUs() {
return us;
}
public void setUs(List<Student> us) {
this.us = us;
}
@Override
public String toString() {
return "StudentInfo [us=" + us + "]";
}
}
2)测试类
package org.xxxx.gson;
import org.xxxx.gson.bean.StudentInfo;
import com.google.gson.Gson;
public class Demo04 {
public static void main(String[] args) {
// 定义字符串
String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}";
// 创建Gson
Gson gson = new Gson();
// 转换
StudentInfo info = gson.fromJson(str, StudentInfo.class);
System.out.println(info);
}
}
3.对象转换成json字符串
使用Gson对象的toJson()方法即可,参数是任意对象
package org.xxxx.gson;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.gson.bean.Student;
import org.xxxx.gson.bean.StudentInfo;
import com.google.gson.Gson;
public class Demo05 {
public static void main(String[] args) {
// 创建集合对象
List<StudentInfo> list = new ArrayList<StudentInfo>();
// 添加两个对象
for (int i = 0; i < 2; i++) {
// 创建对象
StudentInfo si = new StudentInfo();
List<Student> l = new ArrayList<Student>();
// 遍历添加
for (int j = 0; j < 2; j++) {
Student s = new Student();
s.setId("1" + j);
s.setName("stu" + j);
s.setAge("10" + j);
s.setSex("男");
l.add(s);
}
// 添加到si对象
si.setUs(l);
// 添加集合
list.add(si);
}
// 创建Gson
Gson gson = new Gson();
// 转换
String str = gson.toJson(list);
System.out.println(str);
}
}
D.FastJSON
1.概述
是一个性能很好的 Java 语言实现的 JSON 解析器和生成器
来自阿里巴巴的工程师开发
Fastjson API入口类是com.alibaba.fastjson.JSON
常用的序列化操作都可以在JSON类上的静态方法直接完成
2.特点
快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
零依赖(没有依赖其它任何类库除了JDK)
3.将json对象转换成我们需要的数据对象
a.普通object格式转换为对象
{'id':110,'name':'zhangsan','sex':'male','age':18}
package org.xxxx.fastjson;
import org.xxxx.gson.bean.Student;
import com.alibaba.fastjson.JSON;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串
String str = "{'id':110,'name':'zhangsan','sex':'male','age':18}";
// 转换
Student stu = JSON.parseObject(str, Student.class);
System.out.println(stu);
}
}
b.数组格式转换为集合
[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]
package org.xxxx.fastjson;
import java.util.List;
import org.xxxx.gson.bean.Student;
import com.alibaba.fastjson.JSON;
public class Demo02 {
public static void main(String[] args) {
// 定义字符串
String str = "[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]";
// 解析
List<Student> list = JSON.parseArray(str, Student.class);
System.out.println(list);
}
}
c.{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}
package org.xxxx.fastjson;
import org.xxxx.gson.bean.StudentInfo;
import com.alibaba.fastjson.JSON;
public class Demo03 {
public static void main(String[] args) {
// 定义字符串
String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}";
// 转换
StudentInfo info = JSON.parseObject(str, StudentInfo.class);
System.out.println(info);
}
}
4.对象转换为json字符串
a.普通字符串 JSON.toJSONString(s);
b.格式字符串 JSON.toJSONString(s,true);
package org.xxxx.fastjson;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.gson.bean.Student;
import org.xxxx.gson.bean.StudentInfo;
import com.alibaba.fastjson.JSON;
public class Demo04 {
public static void main(String[] args) {
// 定义集合
List<StudentInfo> list = new ArrayList<StudentInfo>();
// 添加数据
for (int i = 0; i < 2; i++) {
StudentInfo si = new StudentInfo();
List<Student> l = new ArrayList<Student>();
for (int j = 0; j < 2; j++) {
Student s = new Student();
s.setId("1" + j);
s.setName("stu" + j);
s.setSex("男");
s.setAge("20" + j);
l.add(s);
}
si.setUs(l);
list.add(si);
}
// 转换
System.out.println(JSON.toJSONString(list));
System.out.println(JSON.toJSONString(list, true));
}
}
A.JSON介绍
1.概述
一种简单的数据格式,比xml更轻巧
是JS的原生格式,这意味着在JS中处理JSON数据不需要任何特殊的工具包
JSON采用完全独立于语言的文本格式,使JSON成为理想的数据交换语言
易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)、
是目前网络中主流的数据传输格式之一,应用十分广泛
2.JSON数据结构
a.对象(JsonObject)
表示"{}"括起来的内容,结构为:{key:value,key:value,...}键值对
key必须是String类型,value可以使任意数据类型
b.数组(JsonArray)
表示"[]"括起来的内容,是有序的,结构为[value,value...]的单值结构
3.JSON与XML的区别
JSON是一种取代XML的数据结构,和xml相比,更小巧,传输更快
4.下面数据用xml和JSON表示
a.xml
<?xml version="1.0" encoding="UTF-8"?>
<country>
<name>中国</name>
<provinces>
<province>
<pNname>河南</pNname>
</province>
<province>
<pNname>山西</pNname>
</province>
</provinces>
</country>
b.JSON
{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}
B.JSON
1.Jar包
JSON-lib包:是一个beans,collections,maps, arrays 和JSON互相转换的工具包
除了json-lib外还依赖
commons-lang
commons-beanutils
commons-collections
commons-logging
ezmorph
2.转换成对象
a.JSONObject.toBean(); json对象格式字符串转换成javabean
获取json对象指定属性值:String id = jsonObj.getString("id");
{'id':110,'name':'zhangsan','sex':'male','age':18}
1)JavaBean:Student
(分析JavaBean,解析的主要部分,成员变量名要和一样json对象一样)
package org.xxxx.json.bean;
public class Student {
private String id;
private String name;
private String sex;
private String age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String id, String name, String sex, String age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
2)转换测试类
package org.xxxx.json;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONObject;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串
String str = "{'id':110,'name':'zhangsan','sex':'male','age':18}";
// 转换为JSONObject对象
JSONObject jsonObject = JSONObject.fromObject(str);
// 转换为JavaBean
Student stu = (Student) JSONObject.toBean(jsonObject, Student.class);
// 输出
System.out.println(stu);
// 获取单个对象:id
String id = jsonObject.getString("id");
System.out.println("id = " + id);
}
}
b.JSONArray.toCollection();Json数组格式转换成对象
获取jsonArray中指定的jsonObject:JSONObject obj = array.getJSONObject(0);
测试代码
package org.xxxx.json;
import java.util.Collection;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
public class Demo02 {
public static void main(String[] args) {
// 定义字符串
String str = "[{'id':110,'name':'zhangsan','sex':'male','age':18},{'id':120,'name':'lisi','sex':'female','age':28}]";
// 转换为JSONOArray
JSONArray jsonArray = JSONArray.fromObject(str);
// 转换为集合对象
Collection<Student> c = JSONArray.toCollection(jsonArray, Student.class);
System.out.println(c);
// 获取第二个数组id:120
String id = jsonArray.getJSONObject(1).getString("id");
System.out.println("id = " + id);
}
}
c.混合式json解析,结合JSONObject和JSONArray里方法实现
{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}
测试代码
package org.xxxx.json;
import java.util.Collection;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Demo03 {
public static void main(String[] args) {
// 定义字符串
// 是个对象,us为键,值为数组
String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}";
// 转换为JSONObject
JSONObject fromObject = JSONObject.fromObject(str);
// 根据key获取JSONArray
JSONArray jsonArray = fromObject.getJSONArray("us");
// 转为集合
Collection<Student> c = jsonArray.toCollection(jsonArray, Student.class);
System.out.println(c);
}
}
d.JSONObject.toBean的时候如果转换的类中有集合
{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}
可以先定义Map<String, Class> map;
在map中put你要转换的类中的集合属性名和转换后类class
然后在toBean()的时候把参数加上
1)建一个Provinces Bean
package org.xxxx.json.bean;
public class Province {
private String pName;
public Province() {
super();
// TODO Auto-generated constructor stub
}
public Province(String pName) {
super();
this.pName = pName;
}
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
@Override
public String toString() {
return "Province [pName=" + pName + "]";
}
}
2)建一个Country Bean
package org.xxxx.json.bean;
import java.util.List;
public class Country {
private String name;
private List<Province> provinces;
public Country() {
super();
// TODO Auto-generated constructor stub
}
public Country(String name, List<Province> provinces) {
super();
this.name = name;
this.provinc
de6c
es = provinces;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Province> getProvinces() {
return provinces;
}
public void setProvinces(List<Province> provinces) {
this.provinces = provinces;
}
@Override
public String toString() {
return "Country [name=" + name + ", provinces=" + provinces + "]";
}
}
3)测试类
package org.xxxx.json;
import java.util.HashMap;
import java.util.Map;
import org.xxxx.json.bean.Country;
import org.xxxx.json.bean.Province;
import net.sf.json.JSONObject;
public class Demo04 {
public static void main(String[] args) {
// 定义字符串
// 一个对象:name和provinces为键,后者的值为一个集合
String str = "{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}";
// 转换为JSONObject
JSONObject fromObject = JSONObject.fromObject(str);
// 集合属性和其中的javabean对应关系
Map<String, Class<Province>> map = new HashMap<String, Class<Province>>();
map.put("provinces", Province.class);
// 转换为bean
Country cou = (Country) JSONObject.toBean(fromObject, Country.class);
System.out.println(cou);
}
}
3.对象转换成JSON
a.使用JSONObject.fromObject()方法;集合对象使用JSONArray.fromObject()方法
package org.xxxx.json;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Demo05 {
public static void main(String[] args) {
// 创建对象
Student stu = new Student("10", "张三", "男", "20");
// 转换成JSON
String str1 = JSONObject.fromObject(stu).toString();
System.out.println(str1);
// 创建集合
List<Student> list = new ArrayList<Student>();
// 添加集合
list.add(stu);
// 转换
String str2 = JSONArray.fromObject(list).toString();
System.out.println(str2);
}
}
b.使用JSONSerializer.toJSON()方法
package org.xxxx.json;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.json.bean.Student;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class Demo05 {
public static void main(String[] args) {
// 创建对象
Student stu = new Student("10", "张三", "男", "20");
// 转换成JSON
String str1 = JSONSerializer.toJSON(stu).toString();
System.out.println(str1);
// 创建集合
List<Student> list = new ArrayList<Student>();
// 添加集合
list.add(stu);
// 转换
String str2 = JSONSerializer.toJSON(list).toString();
System.out.println(str2);
}
}
C.GSON
1.概述
是Google提供的json转换jar
2.将json转换成bean
a.简单的object类型
{'name':'zhangsan','age':20}
package org.xxxx.gson;
import org.xxxx.gson.bean.Student;
import com.google.gson.Gson;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串
String str = "{'name':'zhangsan','age':20}";
// 创建Gson
Gson gson = new Gson();
// 转换 不用强转
Student stu = gson.fromJson(str, Student.class);
System.out.println(stu);
}
}
(注意:直接转换则成员属性的名称必须与Json数据的key一致)
b.解析结果为List
[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]
package org.xxxx.gson;
import java.lang.reflect.Type;
import java.util.List;
import org.xxxx.gson.bean.Student;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Demo02 {
public static void main(String[] args) {
// 定义字符串
String str = "[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]";
// 创建Gson
Gson gson = new Gson();
// 使用Type类型参数:告知返回集合中元素的类型
Type type = new TypeToken<List<Student>>(){}.getType();
// 转换
List<Student> list = gson.fromJson(str, type);
System.out.println(list);
}
}
c.{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}
package org.xxxx.gson;
import org.xxxx.gson.bean.Country;
import com.google.gson.Gson;
public class Demo03 {
public static void main(String[] args) {
// 定义字符串
String str = "{'name':'中国','provinces':[{'pName':'河南'},{'pName':'山西'}]}";
// 创建Gson
Gson gson = new Gson();
// 转换
Country c = gson.fromJson(str, Country.class);
System.out.println(c);
}
}
d.{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}
1)创建JavaBean,放集合
package org.xxxx.gson.bean;
import java.util.List;
public class StudentInfo {
private List<Student> us;
public StudentInfo() {
super();
// TODO Auto-generated constructor stub
}
public StudentInfo(List<Student> us) {
super();
this.us = us;
}
public List<Student> getUs() {
return us;
}
public void setUs(List<Student> us) {
this.us = us;
}
@Override
public String toString() {
return "StudentInfo [us=" + us + "]";
}
}
2)测试类
package org.xxxx.gson;
import org.xxxx.gson.bean.StudentInfo;
import com.google.gson.Gson;
public class Demo04 {
public static void main(String[] args) {
// 定义字符串
String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}";
// 创建Gson
Gson gson = new Gson();
// 转换
StudentInfo info = gson.fromJson(str, StudentInfo.class);
System.out.println(info);
}
}
3.对象转换成json字符串
使用Gson对象的toJson()方法即可,参数是任意对象
package org.xxxx.gson;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.gson.bean.Student;
import org.xxxx.gson.bean.StudentInfo;
import com.google.gson.Gson;
public class Demo05 {
public static void main(String[] args) {
// 创建集合对象
List<StudentInfo> list = new ArrayList<StudentInfo>();
// 添加两个对象
for (int i = 0; i < 2; i++) {
// 创建对象
StudentInfo si = new StudentInfo();
List<Student> l = new ArrayList<Student>();
// 遍历添加
for (int j = 0; j < 2; j++) {
Student s = new Student();
s.setId("1" + j);
s.setName("stu" + j);
s.setAge("10" + j);
s.setSex("男");
l.add(s);
}
// 添加到si对象
si.setUs(l);
// 添加集合
list.add(si);
}
// 创建Gson
Gson gson = new Gson();
// 转换
String str = gson.toJson(list);
System.out.println(str);
}
}
D.FastJSON
1.概述
是一个性能很好的 Java 语言实现的 JSON 解析器和生成器
来自阿里巴巴的工程师开发
Fastjson API入口类是com.alibaba.fastjson.JSON
常用的序列化操作都可以在JSON类上的静态方法直接完成
2.特点
快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
零依赖(没有依赖其它任何类库除了JDK)
3.将json对象转换成我们需要的数据对象
a.普通object格式转换为对象
{'id':110,'name':'zhangsan','sex':'male','age':18}
package org.xxxx.fastjson;
import org.xxxx.gson.bean.Student;
import com.alibaba.fastjson.JSON;
public class Demo01 {
public static void main(String[] args) {
// 定义字符串
String str = "{'id':110,'name':'zhangsan','sex':'male','age':18}";
// 转换
Student stu = JSON.parseObject(str, Student.class);
System.out.println(stu);
}
}
b.数组格式转换为集合
[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]
package org.xxxx.fastjson;
import java.util.List;
import org.xxxx.gson.bean.Student;
import com.alibaba.fastjson.JSON;
public class Demo02 {
public static void main(String[] args) {
// 定义字符串
String str = "[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]";
// 解析
List<Student> list = JSON.parseArray(str, Student.class);
System.out.println(list);
}
}
c.{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}
package org.xxxx.fastjson;
import org.xxxx.gson.bean.StudentInfo;
import com.alibaba.fastjson.JSON;
public class Demo03 {
public static void main(String[] args) {
// 定义字符串
String str = "{'us':[{'name':'zhangsan','age':20},{'name':'zhangsan','age':20}]}";
// 转换
StudentInfo info = JSON.parseObject(str, StudentInfo.class);
System.out.println(info);
}
}
4.对象转换为json字符串
a.普通字符串 JSON.toJSONString(s);
b.格式字符串 JSON.toJSONString(s,true);
package org.xxxx.fastjson;
import java.util.ArrayList;
import java.util.List;
import org.xxxx.gson.bean.Student;
import org.xxxx.gson.bean.StudentInfo;
import com.alibaba.fastjson.JSON;
public class Demo04 {
public static void main(String[] args) {
// 定义集合
List<StudentInfo> list = new ArrayList<StudentInfo>();
// 添加数据
for (int i = 0; i < 2; i++) {
StudentInfo si = new StudentInfo();
List<Student> l = new ArrayList<Student>();
for (int j = 0; j < 2; j++) {
Student s = new Student();
s.setId("1" + j);
s.setName("stu" + j);
s.setSex("男");
s.setAge("20" + j);
l.add(s);
}
si.setUs(l);
list.add(si);
}
// 转换
System.out.println(JSON.toJSONString(list));
System.out.println(JSON.toJSONString(list, true));
}
}
相关文章推荐
- android 学习笔记 解析json格式的数据 JSONObject 和GSON解析json格式数据
- Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)
- gson解析json字符串学习笔记...
- JSON解析学习笔记(json、gson、fastjson)
- GSON解析json的学习笔记
- 学习笔记 Tianmao 篇 使用简单封装后的自定义OkHttp 获取json被GSON解析后的数据
- 学习笔记 Tianmao 篇 OkHttp 网络的使用的简单封装 获取Json用GSON来解析
- Json,Gson,FastJson解析笔记
- Zp的Ext学习笔记(一)——坑爹的MVC(html中Extjs配置、proxy代理的前后台交互、json解析、后台处理传入json乱码)
- Json,Gson,FastJson解析笔记
- Android阶段学习笔记 7.25-7.29 之 解析聚合数据 全国天气预报 Json
- 【coder-pig 教程学习笔记5】Json 解析
- iOS学习笔记(十一)——JSON数据解析
- iOS学习笔记(十一)——JSON数据解析
- IOS学习笔记,网络请求,json解析
- GSON学习-台风路径json解析
- Python学习笔记之解析json的方法分析
- Netty学习笔记之一(Netty解析简单的Http Post Json 请求)
- Python学习笔记-json解析
- 工作笔记之复杂字符串的json解析,使用gson