不积跬步,无以至千里;不积小流,无以成江海。
FastJSON
将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。
依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.23</version>
</dependency>
序列化: 把JavaBean对象转成JSON格式的字符串
1. 基本的序列化
String objJson = JSON.toJSONString(Object object);
例子: 将对象转成JSON字符串
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
String mapJson = JSON.toJSONString(map);
输出结果:
{"key1":"One","key2":"Two"}
例子: 自定义JavaBean转成JSON
User user = new User();
user.setUserName("李四");
user.setAge(24);
String userJson = JSON.toJSONString(user);
输出结果:
{"age":24,"userName":"李四"}
2. 输出格式化后的 JSON 字符串
String objJson = JSON.toJSONString(Object object, boolean prettyFormat);
例子: 对象转成格式化后的JSON字符串
User user = new User();
user.setUserName("李四");
user.setAge(24);
String listJson = JSON.toJSONString(user, true);
输出结果:
{
"age":24,
"userName":"李四"
}
3. 其他特性支持
例子: 日期格式化
String dateJson = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
System.out.println(dateJson);
输出结果:
"2014-05-29 21:36:24"如
如果不加SerializerFeature.WriteDateUseDateFormat
输出结果:
1401370199040
例子: 使用单引号
String listJson = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);
输出结果:
{'age':24,'userName':'李四'}
例子: 输出null字段
缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出
Map<String, Object> map = new HashMap<String,Object>();
String b = null;
Integer i = 1;
map.put("a", b);
map.put("b", i);
String listJson = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
输出结果:
{"a":null,"b":1}
反序列化: 把JSON格式的字符串转化为Java Bean对象
1. 基本的反序列化
Object object = JSON.parseObject(objectJson, Object.class);
例子: 将上述例子中的user反序列化
User user1 = JSON.parseObject(userJson, User.class);
System.out.println(user1.getUserName());
输出结果: 李四
例子: 将list反序列化
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("key1", "One");
map1.put("key2", "Two");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("key1", "Three");
map2.put("key2", "Four");
list.add(map1);
list.add(map2);
String listJson = JSON.toJSONString(list);
List<Map> list1 = JSON.parseArray(listJson, Map.class);
for(Map<String, Object> map : list1){
System.out.println(map.get("key1"));
System.out.println(map.get("key2"));
}
输出结果:
One
Two
Three
Four
例子: 泛型的反序列化(使用TypeReference传入类型信息)
Map<String, Object> map1 = JSON.parseObject(mapJson, new TypeReference<Map<String, Object>>(){});
System.out.println(map1.get("key1"));
System.out.println(map1.get("key2"));
输出结果:
One
Two