fastjson
Json概念:
- Json是一种轻量级的数据交换格式,采用一种“键:值”对 的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。
fastjson:
- fastjson.jar是阿里巴巴开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
jar包:
下载地址:https://github.com/alibaba/fastjson
点击页面中的download即可下载最新的包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
api:
对象 转成 ==> JSON字符串
String objJson = JSON.toJSONString(Object object);
JSON字符串 ==> 对象
User user1 = JSON.parseObject(userJson, User.class);
JSON对象 转成 ==> JSON字符串
序列化就是指 把JavaBean对象转成JSON格式的字符串。
com.alibaba.fastjson.JSON提供了许多方法(多态)实现序列化。
1.基本的序列化
String objJson = JSON.toJSONString(Object object);
2.将Map转成JSON字符串
@Test
public void test01() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
String mapJson = JSON.toJSONString(map);
System.out.println(mapJson);
}
3.List< Map>转成JSON字符串
@Test
public void test01() {
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);
System.out.println(listJson);
}
4.自定义JavaBean User 转成JSON字符串
User 对象
public class User {
public String UserName;
public int Age;
public User(String userName, int age) {
UserName = userName;
Age = age;
}
public User() {
}
public String getUserName() {
return UserName;
}
public void setUserName(String userName) {
UserName = userName;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
@Override
public String toString() {
return "User{" +
"UserName='" + UserName + '\'' +
", Age='" + Age + '\'' +
'}';
}
}
转化方法
@Test
public void test01() {
User user = new User();
user.setUserName("李四");
user.setAge(24);
String userJson = JSON.toJSONString(user);
System.out.println(userJson);
}
输出格式化后的 JSON 字符串
- 传入一个对象和一个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。
String objJson = JSON.toJSONString(Object object, boolean prettyFormat);
@Test
public void test02() {
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, true);
System.out.println(listJson);
}
特性支持
FastJSON提供了许多特性支持
String objJson = JSON.toJSONString(Object object, SerializerFeature…features)
传入一个对象和SerializerFeature类型的可变变量。SerializerFeature是一个枚举。
1.日期格式化:
- FastJSON将java.util.Date转成long。
String dateJson = JSON.toJSONString(new Date());
System.out.println(dateJson);
输出结果:
1401370199040
2.使用SerializerFeature特性格式化日期。
String dateJson = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
System.out.println(dateJson);
输出结果:
“2014-05-29 21:36:24”
3.指定输出日期格式。
String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(dateJson);
输出结果:
“2014-05-29 21:47:00.154”
JSON字符串 ==>JSON对象
反序列化就是把JSON格式的字符串转化为Java Bean对象。
om.alibaba.fastjson.JSON提供了许多方法(多态)实现反序列化。
1. 指定Class信息转 JSON对象
@Test
public void test01() {
User user = new User();
user.setUserName("李四");
user.setAge(24);
// String userJson = JSON.toJSONString(user);
//反序列化
User user1 = JSON.parseObject(userJson, User.class);
System.out.println(user1);
}
2. 集合list 转 JSON对象
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"));
}
3. 泛型转 JSON对象 (使用TypeReference传入类型信息)
@Test
public void test03() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
String mapJson = JSON.toJSONString(map);
Map<String, Object> map1 = JSON.parseObject(mapJson, new TypeReference<Map<String, Object>>(){});
System.out.println(map1.get("key1"));
System.out.println(map1.get("key2"));
}
JSONObject,JSONArray是JSON的两个子类。
JSONObject 相当于 Map<String, Object>,
JSONArray 相当于 List。
JSONObject 类应用案例:
@Test
public void test03() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
JSONObject j = new JSONObject(map);
j.put("key3", "Three");
System.out.println(j.get("key1"));
System.out.println(j.get("key2"));
System.out.println(j.get("key3"));
}
JSONArray 类应用案例:
@Test
public void test03() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("key1", "Three");
map2.put("key2", "Four");
list.add(map);
list.add(map2);
JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));
for (int i = 0; i < j.size(); i++) {
System.out.println(j.get(i));
}
}