一.JSON 介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。
JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)
二.Fastjson 简介
Fastjson是阿里巴巴的开源JSON解析库,基于Java语言,支持JSON格式的字符串与JavaBean之间的相互转换。
fastjson 常用 API
fastjson API 入口类是com.alibaba.fastjson.JSON
,常用的序列化操作都可以在JSON
类上的静态方法直接完成。
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。
有关类库的一些说明
- JSONArray : 相当于List
- JSONObject: 相当于Map<String,Object>
JSONObject是JSON字符串与pojo对象转换过程中的中间表达类型,实现了Map接口,可以看做是一个模拟JSON对象键值对再加上多层嵌套的数据集合,对象的每一个基本类型属性是map里的一个key-value,一个非基本类型属性是一个嵌套的JSONObject对象(key是属性名称,value是表示这个属性值的对象的JSONObject)。如果以前用过apache beanutils里的DynamicBean之类的,就知道JSONObject也是一种动态描述Bean的实现,相当于是拆解了Bean本身的结构与数据。这时候由于JSONObject里可能会没有记录全部的Bean类型数据,例如泛型的具体子类型之类的元数据,如果JSONObject与正常的POJO混用,出现问题的概率较高。
JSON、JSONObject、JSONArray、javabean关系的解析:
首先JSON、JSONObject、JSONArray是属于FastJson框架的类,它们就是普通的类只不过在FastJson框架赋予了它们对json格式字符的处理能力。
JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供处理对象样子的json字符的类。
JSONArray:fastJson提供处理数组样子的json字符的类。
当然你也可以不用JSONObject、JSONArray,直接将json字符串转换为能匹配上的javabean。如果你没有能匹配的那你就考虑转换为JSONObject、JSONArray,因为JSONObject、JSONArray也可以对属性进行操作。
JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象; [] 中括号表示数组
由于JSONObject和JSONArray继承了JSON,所以也可以直接使用两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆下面方法都使用JSON。
1.json字符 转换为 JSONObject
JSONObject jsonObject = JSON.parseObject("对象样子的json字符");
JSONObject jsonObject = JSONObject.fromObject("对象样子的json字符");
String jsonStr1 = "{\"password\":\"12345\",\"username\":\"dmego\"}";User user = JSON.parseObject(jsonStr1, User.class);System.out.println("json字符串转简单java对象:"+user.toString());
2.json字符 转换为 JSONArray
JSONArray jsonArray = JSON.parseArray("数组样子的json字符");
JSONArray jsonArray = JSONArray .fromObject("数组样子的json字符");
/** json字符串转List<Object>对象* 字符串:[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]*/String jsonStr2 = "[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]";List<User> users = JSON.parseArray(jsonStr2, User.class);System.out.println(users.toString());JSON.parseArray(jsonStr2);
JSON最佳实践
https://juejin.cn/post/6844903605279932423#heading-1