JSON全面讲解
一、Json简介
概念:JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。
优点:
(1)本质就是具有特定格式的字符串
(2)JSON完全独立于编程语言
(3)JSON比XML数据传输的有效性要高出很多,更省流量
缺点:
语义性较差,不如XML直观
二、JSON数据格式
整体结构
(1) String json1 = “{“id” : “12”,”name” : “Tom”}”
(2)String json2 = “[{“id” : “12”,”name” : “Tom”},{“id” : “12”,”name” : “Tom”}]”
对象:{} -----类似于java中的map集合
(1)Json对象的结构:{key1:value1,key2:value2...}
(2)key的数据类型:字符串
(3)value的数据类型:数值、字符串、null、json数据[]、json对象{}、
数组:[] ----类似于java中list集合
(1)Json数组的结构:[value1,value2....]
(2)value的数据类型:数值、字符串、null、json数组[]、json对象{}
三、JSON解析方向
将java对象(包括集合)转换为json格式字符串----在服务端应用
将json格式的字符串转换为java对象(包含集合)----在客户端应用
和java之间的转换关系
(1)json对象对应javabean对象
(2)Json数组和java对象构成的list对应
四、JSON解析技术
原生技术
特点:编程相对麻烦
数据之间的转换
(1)将json格式的字符串{}转换为java对象
:
(json):将json字符串解析为json对象
根据name,在json对象中得到对应的Value
根据name,在json对象中得到对应的Value
方法会在对应的key中的值不存在的时候返回一个空字符串或者返回你指定的默认值。
但是get方法会出现空指针异常的情况。
(2)将json格式的字符串[]转换为java对象的List
API:
将json字符串解析为json数组
得到json数组中元素的个数
(3)复杂json数据解析
其实就是既有json字符串又有json数组
Google没有提供将java转换为json的方法。
Gson框架技术
特点:编码简洁,Google官方推荐
数据之间转换:
(1)将json格式的字符串{}转换为java对象
API:
<T> T fromJson(String json,Class<T> classofT)
注意:要求Json对象中的key的名称与java对象对应的类中的属性名要相同
步骤:
(a)将Gson的jar包导入的项目中
(b)创建Gson对象
Gson gson = new Gson();
(c)通过创建的Gson对象调用fromJson()方法,返回该Json数据对应的java对象
DataInfo dataInfo = gson.fromJson(json,DataInfo,class);
(2)将json格式的字符串[]转换为java对象的List
API:
fromJson(json,Type typeofT);
步骤:
(a)将Gson的jar包导入的项目中
(b)创建Gson对象
Gson gson = new Gson();
(c)通过创建的Gson对象调用fromJson()方法,返回该Json数据对应的java集合
List<DataInfo> infos = gson.fromJson(josn,new TypeToken<List<DataInfo>>(){}.getType());
(3)将java对象转换为json字符串{}
:
String toJson(Object src);
(a)将Gson的jar包导入的项目中
(b)创建Gson对象
Gson gson = new Gson();
(c)通过创建的Gson对象调用toJson()方法,返回该Json数据
DataInfo info = new DataInfo(1,”apple”,250.0,”eggs”);
String json = gson.toJson(info);
(4)将java对象的List转换为json字符串[]
API:
String toJson(Object src);
步骤:
(a)将Gson的jar包导入的项目中
(b)创建Gson对象
Gson gson = new Gson();
(c)通过创建的Gson对象调用toJson()方法,返回该Json数据
List<DataInfo> infoList = new ArrayList<>();
String json = gson.toJson(infoList);
FastJson技术
特点:FastJson是一个java语言编写的高性能功能完善的Json库,它采用一种“假定有序快速匹配”的算法,把Json解析的性能提升到极致,是目前java语言中最快的Josn库
数据间转换
(1)将json格式的字符串{}转换为java对象
API:
<T> T parseObject(String json,Class<T> classOfT);
步骤:
(a)将FastJson的jar包导入的项目中
(b)JSON调用parseObject()方法,获取转换后的java对象
DataInfo dataInfo = JSON.parseObject(json,DataInfo.class);
(2)将json格式的字符串[]转换为java对象的List
API:
List<T> parseArray(String json,Class<T> classOfT);
步骤:
(a)将FastJson的jar包导入的项目中
(b)JSON调用parseArray()方法,获取转换后的java集合
List<DataInfo> infoList = new ArrayList(json,DataInfo.class);
(3)将java对象转换为json字符串{}
API:
String toJSONString(Object object);
步骤:
(a)将FastJson的jar包导入的项目中
(b)JSON调用toJSONString()方法,获取转换后的json数据
DataInfo dataInfo = new DataInfo(1,”apple”,2,”eggs”);
String json = JSON.toJSONString(dataInfo);
(4)将java对象的List转换为json字符串[]
API:
String toJSONString(Object object);
步骤:
将FastJson的jar包导入的项目中
调用toJSONString()方法,获取转换后的json数据
List<DataInfo> infoList = new ArrayList();
DataInfo zhangsan = new DataInfo(1,zhangsan);
DataInfo lisi = new DataInfo(2,lisi);
infoList.add(zhangsan);
infoList.add( lisi );
String json = JSON.toString(infoList);
最后说一下根据不同的json数据(获取到的json数据用HI JSON 进行格式化,就会很清晰json数据的结构),JavaBean类的编写原则:
(1)遇到{}就写一个类
(2)遇到[]就写一个集合一般写ArrayLsit
(3)什么符号都没有,就是基本数据类型
(4)尽量把javaBean对象定义广一些
(5)有的人说我不想写那个,太烦了,好吧,GsonFormat工具可以自动生成javaBean类