Alibaba_fastjson上手

一、简介

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。中文文档

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>x.x.x</version>
</dependency>

二、语法

fastjson使用简单,API十分简洁。

String text = JSON.toJSONString(obj); 	//序列化
VO vo = JSON.parseObject("{...}", VO.class); 	//反序列化

SerializeWriter:相当于StringBuffer
JSONArray:相当于List<Object>
JSONObject:相当于Map<String, Object>
JSON反序列化没有真正数组,本质类型都是List<Object>

三、创建JSON对象

创建 JSON 对象非常简单,只需使用 JSONObject(fastJson提供的json对象)和 JSONArray(fastJson提供json数组对象)对象即可。
我们可以把JSONObject 当成一个 Map<String,Object>,JSONArray 当成一个List<Object> 来看,只是 JSONObject 提供了更为丰富便捷的方法,方便我们对于对象属性的操作。

源码:
在这里插入图片描述
在这里插入图片描述
此外,由于 JSONObject 和 JSONArray 继承了 JSON,所以说也可以直接使用两者对 JSON 格式字符串与 JSON 对象及 javaBean 之间做转换,不过为了避免混淆我们还是使用 JSON。

@Test
public void test_FastJson() throws ParseException {
    
    
	// JSONObject 可当成一个 Map<String,Object> 
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < 2; i++) {
    
    
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("AGE", 10);
        jsonObject.put("FULL NAME", "Doe " + i);
        jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
        jsonArray.add(jsonObject);
    }
    // 输出结果为 JSON字符串
    String jsonOutput = jsonArray.toJSONString();
    System.out.println(jsonOutput);
}

输出结果:

[
   {
      "AGE":"10",
      "DATE OF BIRTH":"2016/12/12 12:12:12",
      "FULL NAME":"Doe 0"
   },
   {
      "AGE":"10",
      "DATE OF BIRTH":"2016/12/12 12:12:12",
      "FULL NAME":"Doe 1"
   }
]

四、JSON 转 Java 对象

现在我们已经学会了如何创建 JSON 对象,以及如何将 Java 对象转换为 JSON 字符串,接下来我们就需要了解如何解析 JSON:

@Test
public void whenJson_thanConvertToObjectCorrect() {
    
    
    Person person = new Person(20, "John", "Doe", new Date());
    String jsonObject = JSON.toJSONString(person);
    Person newPerson = JSON.parseObject(jsonObject, Person.class);
     
    assertEquals(newPerson.getAge(), 0); // 如果我们设置系列化为 false
    assertEquals(newPerson.getFullName(), listOfPersons.get(0).getFullName());
}

我们可以使用 JSON.parseObject() 将 JSON 字符串转换为 Java 对象。
注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常。

com.alibaba.fastjson.JSONException: default constructor not found.

以下是简单的实例测试:

Person [age=20, fullName=John Doe, dateOfBirth=Wed Jul 20 08:51:12 WEST 2016]

@JSONField deserialize 可选项可以指定字段不反序列化。

@JSONField(name = "DATE OF BIRTH", deserialize=false)
private Date dateOfBirth;

输出结果为:

Person [age=20, fullName=John Doe, dateOfBirth=null]

猜你喜欢

转载自blog.csdn.net/hu4545/article/details/125624656