1 原理图
2 Fastjson
2.1 JSON、JSONObject和JSONArray
JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。它有两个子类,所以json支持的,他的子类都支持,下面的JSON都可以替换成为JSONObject
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。
2.2 jar
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.23</version>
</dependency>
2.3 序列化和反序列化
序列化:把JavaBean对象转成JSON格式的字符串。
反序列化:反序列化就是把JSON格式的字符串转化为Java Bean对象。
3 序列化—toJSONString
3.1 概述
3.2 基本的序列化--toJSONString(object)
3.2.1 概念
String objJson = JSON.toJSONString(Object object);
传入一个对象,将对象转成JSON字符串。
3.2.2 Map
3.2.3 List<Map>--得到数组
3.2.4 JavaBean
3.3 json格式--toJSONString(object, boolean);
3.3.1 概念
String objJson = JSON.toJSONString(Object object, boolean prettyFormat);
传入一个对象和一个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。
3.3.2 List<map>举例
3.4 特殊序列化--toJSONString(object, Serializer)
3.4.1 概念
toJSONString(Object object, SerializerFeature... features)
传入一个对象和SerializerFeature类型的可变变量。SerializerFeature是一个枚举。
com.alibaba.fastjson.serializer.SerializerFeature
3.4.2 日期格式化:
FastJSON可以直接对日期类型格式化,在缺省的情况下,FastJSON会将Date转成long。
输出默认格式:
也可以指定输出日期格式:
3.4.3 输出格式单引号
参看list<map>
3.4.4 JSON格式化
参看list<map>
3.4.5 输出Null字段
缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出。
3.4.6 序列化是写入类型信息
由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。
由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。
如果User序列化是没有加入类型信息(SerializerFeature.WriteClassName),按照例12的做法就会报错(java.lang.ClassCastException)。
4 反序列化
4.1 概念
反序列化就是把JSON格式的字符串转化为JavaBean对象。
com.alibaba.fastjson.JSON提供了许多方法(多态)实现反序列化。
4.2 Class信息反序列化-- parseObject(json, .class)
4.2.1 Map--泛型的反序列化
泛型的反序列化(使用TypeReference传入类型信息)。
4.2.2 List<map>
4.2.3 javabean
4.3 数组反序列化-- parseArray
5 javaBean与json对象间的转换使用
javaBean与json对象间的转换使用:JSON.toJSON(obj),然后使用强制类型转换,JSONObject或者JSONArray。
6 JSONObject特有
7 JSONArray特有
8 JsonUtils
public class JsonUtils {
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
/**
* 将对象转换成json字符串。
* <p>Title: pojoToJson</p>
* <p>Description: </p>
* @param data
* @return
*/
public static String objectToJson(Object data) {
try {
String string = MAPPER.writeValueAsString(data);
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将json结果集转化为对象
*
* @param jsonData json数据
* @param clazz 对象中的object类型
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json数据转换成pojo对象list
* <p>Title: jsonToList</p>
* <p>Description: </p>
* @param jsonData
* @param beanType
* @return
*/
public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}