参考博客http://t.csdn.cn/oh4R3
fastjson
使用fastjson先需要导入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.23</version>
</dependency>
1.实现序列化的方法
序列化就是指 把JavaBean对象转成JSON格式的字符串。
com.alibaba.fastjson.JSON提供了许多方法(多态)实现序列化
1.1最基本的序列化方式
调用格式
String objJson = JSON.toJSONString(Object object);
案例
//普通字符串
String str1 = "str1";
String s = JSON.toJSONString(str1);// 结果 "str1"
//map转为json
Map<String,Object> map = new HashMap<>();
map.put("小明","1");
map.put("小红","2");
String s1 = JSON.toJSONString(map);//结果 {"小明":"1","小红":"2"}
//list中为map转为json
Map<String,Object> map1 = new HashMap<>();
map1.put("小明","1");
map1.put("小红","2");
Map<String,Object> map2 = new HashMap<>();
map2.put("小明","1");
map2.put("小红","2");
List<Map<String,Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
String s2 = JSON.toJSONString(list);//结果 [{"小明":"1","小红":"2"},{"小明":"1","小红":"2"}]
User user = new User("小张",12,"男");
String s3 = JSON.toJSONString(user);//结果 {"age":12,"gender":"男","name":"小张"}
1.2设置是否格式化
方法
String objJson = JSON.toJSONString(Object object, boolean prettyFormat);
prettyFormat就是一个布尔型的数据,true表示需要格式化,false表示不格式化
格式化就是让json字符串不要一行排列,让其有层次
案例
Map<String,Object> map1 = new HashMap<>();
map1.put("小明","1");
map1.put("小红","2");
Map<String,Object> map2 = new HashMap<>();
map2.put("小明","1");
map2.put("小红","2");
List<Map<String,Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
String s2 = JSON.toJSONString(list,true);
System.out.println(s2);
结果
[
{
"小明":"1",
"小红":"2"
},
{
"小明":"1",
"小红":"2"
}
]
1.3对日期时间的格式化
案例
String s = JSON.toJSONString(new Date());//结果 1651463420455
//结果 "2022-05-02 11:51:20"
String s1 = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
//指定日期格式 结果 "2022-05-02 11:52:03.125"
String s2 = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
1.4输入的json使用单引号
案例
Map<String,Object> map1 = new HashMap<>();
map1.put("小明","1");
map1.put("小红","2");
Map<String,Object> map2 = new HashMap<>();
map2.put("小明","1");
map2.put("小红","2");
List<Map<String,Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
//结果 [{'小明':'1','小红':'2'},{'小明':'1','小红':'2'}] 使用的是单引号
String s2 = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);
1.5输出null字段
案例
Map<String, Object> map = new HashMap<String,Object>();
String b = null;
Integer i = 1;
map.put("a",b);
map.put("b",i);
//结果 {"a":null,"b":1}
String listJson = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
1.6输出json类型
案例
User user = new User("小明",18,"男");
//结果 {"@type":"com.hty.pojo.User","age":18,"gender":"男","name":"小明"}
String s = JSON.toJSONString(user, SerializerFeature.WriteClassName);
由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。
1.7反序列化
案例
User user = new User("小明",18,"男");
String s = JSON.toJSONString(user, SerializerFeature.WriteClassName);
//结果 User(name=小明, age=18, gender=男)
User user1 = (User)JSON.parse(s);