阿里的Json解析包FastJson使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里的Json解析包FastJson使用相关的知识,希望对你有一定的参考价值。

参考技术A

maven配置:

源码地址

public static final Object parse(String text);

public static final JSONObject parseObject(String text);

public static final <T> T parseObject(String text, Class<T> clazz);

public static final JSONArray parseArray(String text);

public static final <T> List<T> parseArray(String text, Class<T> clazz);

public static final String toJSONString(Object object, boolean prettyFormat);

public static final Object toJSON(Object javaObject);

public static final String toJSONString(Object object);

阿里巴巴FastJSON使用实例

 

1. 什么是fastjson?

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

Fastjson使用场景

 

Fastjson已经被广泛使用在各种场景,包括cache存储、RPC通讯、MQ通讯、网络协议通讯、Android客户端、Ajax服务器处理程序等等。

2.fastjson的优点

2.1 速度快

fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

2.2 使用广泛

fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。

2.3 测试完备

fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。

2.4 使用简单

fastjson的API十分简洁。

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

2.5 功能完备

支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

以下例子对JSON.toJSONString和JSON.parseObject这2个重要方法进行测试:

 

Fruit实体类:

 1 package com.led.daorumysql;
 2 
 3 /**
 4  * 定义水果实体类
 5  * @author 86157
 6  *
 7  */
 8 public class Fruit {
 9     
10     //水果名字
11     private String name;
12     //水果产地
13     private String origin;
14     //水果价格
15     private Integer price;
16     
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String getOrigin() {
24         return origin;
25     }
26     public void setOrigin(String origin) {
27         this.origin = origin;
28     }
29     public Integer getPrice() {
30         return price;
31     }
32     public void setPrice(Integer price) {
33         this.price = price;
34     }
35     @Override
36     public String toString() {
37         return "Fruit [name=" + name + ", origin=" + origin + ", price=" + price + "]";
38     }
39     
40     public Fruit(String name, String origin, Integer price) {
41         super();
42         this.name = name;
43         this.origin = origin;
44         this.price = price;
45     }
46     
47     public Fruit() {
48         super();
49     }
50     
51     
52     
53     
54 }

主类:

 1 package com.led.daorumysql;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import com.alibaba.fastjson.JSON;
 7 
 8 /**
 9  * FastJSON测试类
10  * @author 86157
11  *
12  */
13 public class FastJSONTest {
14 
15     public static void main(String[] args) {
16         //实例化Fruit类
17         Fruit fruitOne = new Fruit("apple", "America", 13);
18         Fruit fruitTwo = new Fruit("orange", "China", 15);
19         //创建fruitList对象
20         List<Fruit> fruitList = new ArrayList<Fruit>();
21         fruitList.add(fruitOne);
22         fruitList.add(fruitTwo);
23         
24         //将java对象(Fruit)转成json字符串
25         System.out.println("=========将java对象(Fruit)转成json字符串===========");
26         String fruitOne_jsonString = JSON.toJSONString(fruitOne);
27         System.out.println("fruitOne_jsonString: " + fruitOne_jsonString);
28         System.out.println();
29         
30         //将json字符串转成java对象(Fruit)
31         System.out.println("=========将json字符串转成java对象(Fruit)===========");
32         Fruit fruitOne_parseObject = JSON.parseObject(fruitOne_jsonString, Fruit.class);
33         System.out.println("fruit object: " + fruitOne_parseObject);
34         System.out.println("fruit name: " + fruitOne_parseObject.getName());
35         System.out.println("fruit origin: " + fruitOne_parseObject.getOrigin());
36         System.out.println("fruit price: " + fruitOne_parseObject.getPrice());
37         System.out.println();
38         
39         //将java对象(fruitList)转成json字符串
40         System.out.println("=========将java对象(fruitList)转成json字符串========");
41         String fruitList_jsonString = JSON.toJSONString(fruitList);
42         System.out.println("fruitList_jsonString: " + fruitList_jsonString);
43         System.out.println();
44         
45         //将json字符串转成java对象(fruitList)
46         System.out.println("=========将json字符串转成java对象(fruitList)========");
47         List<Fruit> parseArray = JSON.parseArray(fruitList_jsonString, Fruit.class);
48         System.out.println("fruitOne object: " + parseArray.get(0).toString());
49         System.out.println("fruitTwo object: " + parseArray.get(1).toString());
50         System.out.println("fruitTwo object name: " + parseArray.get(1).getName());
51         
52     }
53 }

控制台输出:

 1 =========将java对象(Fruit)转成json字符串===========
 2 fruitOne_jsonString: {"name":"apple","origin":"America","price":13}
 3 
 4 =========将json字符串转成java对象(Fruit)===========
 5 fruit object: Fruit [name=apple, origin=America, price=13]
 6 fruit name: apple
 7 fruit origin: America
 8 fruit price: 13
 9 
10 =========将java对象(fruitList)转成json字符串========
11 fruitList_jsonString: [{"name":"apple","origin":"America","price":13},{"name":"orange","origin":"China","price":15}]
12 
13 =========将json字符串转成java对象(fruitList)========
14 fruitOne object: Fruit [name=apple, origin=America, price=13]
15 fruitTwo object: Fruit [name=orange, origin=China, price=15]
16 fruitTwo object name: orange

注意:

实体类中要创建构造方法,不然parseObject会报如下错误:

Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found. class com.led.daorumysql.Fruit
    at com.alibaba.fastjson.util.JavaBeanInfo.build(JavaBeanInfo.java:197)
    at com.alibaba.fastjson.parser.ParserConfig.createJavaBeanDeserializer(ParserConfig.java:465)
    at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:412)
    at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:324)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:594)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:569)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:257)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:227)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:186)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:310)
    at com.led.daorumysql.FastJSONTest.main(FastJSONTest.java:27)

 

 

以上是关于阿里的Json解析包FastJson使用的主要内容,如果未能解决你的问题,请参考以下文章

阿里巴巴fastjson 包的使用解析json数据

Json转换Bean太过复杂?试试阿里巴巴的FastJSON

阿里巴巴FastJSON使用实例

阿里巴巴fastjson的使用问题

阿里巴巴开源的 JSON 解析库 Fastjson 被曝高危漏洞,官方已发布安全公告

java使用json需要哪些jar包