JSON介绍
JSON(javaScript Object Notation)是一种轻量级的数据交换格式。
主要采用键值对({"name": "json"})的方式来保存和表示数据,作为前后端数据交换所用。
JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质上是一个字符串。更多简介见介绍JSON。
JSON取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度
json形式及语法
1、JSON对象
{
"ID": 1001,
"name": "张三",
"age": 24
}
- 数据在花括号中
- 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)
- 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)
遵守上面3点,便可以形成一个json对象。
2、JSON对象数组
[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}
]
- 数据在方括号中(可理解为数组)
- 方括号中每个数据以json对象形式出现
- 每两个数据以逗号分隔(最后一个无需逗号)
遵守上面3点,便可形成一个json对象数组(及一个数组中,存储了多个json对象)
理解了上面两种基本的形式,我们就可以得出其他的数据形式,例如下面这个:
{
"部门名称":"研发部",
"部门成员":[
{"ID": 1001, "name": "张三", "age": 24},
{"ID": 1002, "name": "李四", "age": 25},
{"ID": 1003, "name": "王五", "age": 22}],
"部门位置":"xx楼21号"
}
3、JSON字符串
JSON字符串也是在平时开发中使用较多的,json字符串应满足以下条件:
1:它必须是一个字符串,由" "或者' '包裹数据,支持字符串的各种操作
2:里面的数据格式应该要满足其中一个格式,可以是json对象,也可以是json对象数组或者是两种基本形式的组合变形。
总结:json可以简单的分为基本形式:json对象,json对象数组。两种基本格式组合变形出其他的形式,但其本质还是json对象或者json对象数组中的一种。json对象或对象数组可以转化为json字符串,使用于不同的场合。
注意点:在封装json数据的时候,很容易出现错误,比如粗心的在最后一条数据的末尾加上了逗号等等,这里我提供一个在线验证工具,方便大家验证json数据格式的正确性
FastJson简介
fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。除了这个fastjson以外,还有Google开发的Gson包,其他形式的如net.sf.json包,都可以实现json的转换。方法名称不同而已,最后的实现结果都是一样的。
官方开源地址:https://github.com/alibaba/fastjson
maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
一、FastJson 常用 API
1、JSON对象
FastJson API 入口类是com.alibaba.fastjson.JSON
,常用的序列化操作都可以在JSON
类上的静态方法直接完成。
主要的API是JSON.toJSONString和JSON.parseObject
package com.alibaba.fastjson;
public abstract class JSON {
public static final String toJSONString(Object object);
public static final <T> T parseObject(String text, Class<T> clazz, Feature... features);
}
序列化:Object-->String
String jsonString = JSON.toJSONString(obj);
反序列化:String-->Object
VO vo = JSON.parseObject("...", VO.class);
泛型反序列化:
import com.alibaba.fastjson.TypeReference;
List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});
注意:
- JSONArray : 相当于List
- JSONObject: 相当于Map<String,Object>
// JSON文本parse为JSONObject或者JSONArray
public static final Object parse(String text);
// JSON文本parse成JSONObject
public static final JSONObject parseObject(String text);
// JSON文本parse为JavaBean
public static final <T> T parseObject(String text, Class<T> clazz);
// JSON文本parse成JSONArray
public static final JSONArray parseArray(String text);
// JSON文本parse成JavaBean集合
public static final <T> List<T> parseArray(String text, Class<T> clazz);
// JavaBean序列化为JSON文本
public static final String toJSONString(Object object);
// JavaBean序列化为带格式的JSON文本
public static final String toJSONString(Object object, boolean prettyFormat);
// JavaBean转换为JSONObject或者JSONArray
public static final Object toJSON(Object javaObject);
使用实例
parse POJO
import com.alibaba.fastjson.JSON;
//将JSON文本转换为java对象
Model model = JSON.parseObject(jsonStr, Model.class);
parse Tree
import com.alibaba.fastjson.*;
JSONObject jsonObj = JSON.parseObject(jsonStr);
parse POJO Generic
import com.alibaba.fastjson.JSON;
Type type = new TypeReference<List<Model>>() {}.getType();
List<Model> list = JSON.parseObject(jsonStr, type);
convert POJO to json string
import com.alibaba.fastjson.JSON;
Model model = ...;
String jsonStr = JSON.toJSONString(model);
convert POJO to json bytes
import com.alibaba.fastjson.JSON;
Model model = ...;
byte[] jsonBytes = JSON.toJSONBytes(model);
write POJO as json string to OutputStream
import com.alibaba.fastjson.JSON;
Model model = ...;
OutputStream os;
JSON.writeJSONString(os, model);
write POJO as json string to Writer
import com.alibaba.fastjson.JSON;
Model model = ...;
Writer writer = ...;
JSON.writeJSONString(writer, model);
2、JSONObject 对象
JSONObject json=new JSONObject();
json.put("type","add");
json.put("desc","添加用户");
json.put("content",userBean);
String s=json.toJSONString();