引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
序列化
序列化就是指 把JavaBean对象转成JSON格式的字符串。
1.一般对象序列化
Map<String,Object> map = new HashMap<String,Object>();
map.put("id","1");
map.put("name","zhangsan");
map.put("now", LocalDateTime.now());
map.put("now1", new Date());
map.put("nullVal", null);
String s = JSON.toJSONString(map);
输出结果:{“now”:“2022-03-30T17:26:06.014”,“name”:“zhangsan”,“now1”:1648632366015,“id”:“1”}
2.list对象序列化
List<GridManagerVo> list = new ArrayList<>();
GridManagerVo vo = new GridManagerVo();
vo.setId("123");
GridManagerVo vo1 = new GridManagerVo();
vo1.setId("12343");
GridManagerVo vo2 = new GridManagerVo();
vo2.setId("12323");
list.add(vo);
list.add(vo1);
list.add(vo2);
String jsonArray = JSON.toJSONString(list);
输出结果:[{“id”:“123”},{“id”:“12343”},{“id”:“12323”}]
3.指定SerializerFeature特性进行序列化
时间格式化
String s2 = JSON.toJSONString(map, SerializerFeature.WriteDateUseDateFormat);
使用单引号
String s3 = JSON.toJSONString(map, SerializerFeature.UseSingleQuotes);
格式化
String s4 = JSON.toJSONString(map, SerializerFeature.PrettyFormat);
输出null值
String s5 = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
输出class类型
String s6 = JSON.toJSONString(map, SerializerFeature.WriteClassName);
##这种情况就可以直接强制转换,因为带了class类型
Map res = (HashMap)JSON.parse(s6);
指定日期格式
String s7 = JSON.toJSONStringWithDateFormat(map,"yyyy-MM-dd");
反序列化
反序列化就是把JSON格式的字符串转化为Java Bean对象。
1.反序列化为指定class类型
Map map1 = JSON.parseObject(s7, Map.class);
2.反序列化为list集合
List<GridManagerVo> gridManagerVos = JSON.parseArray(jsonArray, GridManagerVo.class);
@JSONField 注解
//指定name属性, 字段的名称
@JSONField(name = "gridId")
private String id;
//使用 ordinal属性, 指定字段的顺序
@JSONField(ordinal = -1)
private String loginName;
//使用 serialize属性, 指定字段不序列化
@JSONField(serialize = false)
private String name;
JSONObject,JSONArray
JSONObject,JSONArray为JSON的子类
JSONObject相当于Map<String, Object>
JSONArray相当于List< Object>
json字符串转JSONObject
String jsonStr="{'id':'1','name':'zhangsan'}";
JSONObject jsonObject = JSON.parseObject(jsonStr);
JSONObject jsonObject = new JSONObject(map);
jsonObject.put("jsonkey","jsonval");
System.out.println(jsonObject.get("id"));
System.out.println(jsonObject.get("jsonkey"));
JSONArray array = JSONArray.parseArray(JSON.toJSONString(list));
array.forEach(arrayvo->{
System.out.println(arrayvo);
});
JSONObject转换成实体类
jsonObject.toJavaObject(User.class);
JSONArray转换成list集合
List<User> users= jsonArray.toJavaList(User.class)
自用json工具类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class MyJsonUtil {
private static final SerializerFeature[] features = {
SerializerFeature.WriteMapNullValue, // 输出空置字段
SerializerFeature.WriteNullListAsEmpty,// list字段如果为null,输出为[],而不是null
SerializerFeature.WriteNullNumberAsZero,//数值字段如果为null,输出为0,而不是null
SerializerFeature.WriteNullBooleanAsFalse,//Boolean字段如果为null,输出为false,而不是null
SerializerFeature.WriteNullStringAsEmpty,//字符类型字段如果为null,输出为"",而不是null
SerializerFeature.WriteDateUseDateFormat //日期格式化yyyy-MM-dd HH:mm:ss
};
private static final String simpleDateFormat = "yyyy-MM-dd";
public static String toJson(Object object){
return JSON.toJSONString(object,features);
}
public static String toJsonWithSimpleDateFormat(Object object){
return JSON.toJSONStringWithDateFormat(object,simpleDateFormat);
}