json是一种轻量级的数据交换格式,基于两种数据结构:Object(name/value pair),Array(list);json具有平台无关性,完全独立于语言/系统的文本格式;
相比于xml比较轻量级,易于机器解析和生成;可以进行压缩;
常用的json库
- Jackson:Spring默认的json序列化工具,开源;https://github.com/FasterXML/jackson
- Gson:内部反射类型进行序列化,Google出品:https://github.com/google/gson
- Fastjson:接口友好,阿里巴巴出品,速度比较快,:https://github.com/alibaba/fastjson
注意事项
- fastjson和Gson默认情况下不会将null变量写到json中,jackson会将不存在的字段设置为null;需要支持null:java对象转换json的细节处理
- jackson反序列化为对象时,改对象所属的类必须有无参构造函数;
- jackson的驼峰命名,当第一个变量用大写字母,例如BFlag,在序列化会变成bflag,全部转换成小写;
- 非public的属性变量不会进行序列化和反序列化,除非有getter、setter方法(Gson除外);
- jackson中@JsonProperty注解,可以解析非public的属性
- jackson静态变量不序列化
序列化和反序列化
序列化过程是指将java对象转化成json串,反序列化是指将json串转化成java对象;
|
|
jackson反序列化数组示例:
|
|
fastJson快捷使用
|
|
JSONP
json用来传输数据,jsonp用来解决ajax请求跨域问题;
client传递一个callback参数(参数名可以自定义)给Server,Server返回数据时会将这个callback参数作为函数名来包裹住JSON数据
原理介绍和实现例子