史上最全的JSON解析之Fastjson

  • Post author:
  • Post category:其他


从书呆子变成读书人,再从读书人变成知识分子。



Fastjson简介

Fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自

阿里巴巴

的工程师开发,是目前Java语言中

最快

的JSON库。Fastjson

简单易用

,已经

被广泛使用

在协议交互、Web网站、Android客户端等多种应用场景。

简言之:

Fastjson是一个 Java 库,可以将 Java 对象转换为 JSON 格式或者将 JSON 字符串转换为 Java 对象

在这里插入图片描述

(看图标就知道有多快了)



使用准备



JavaWeb工程

1.JavaWeb工程的话,

在工程目录下新建lib目录,再复制jar包到lib目录下



若是没有Fastjson的jar包的话,通过下方的链接去我的百度网盘里下载即可。

链接:

https://pan.baidu.com/s/1CHTuqpsTmtaK4ZeIneJlUg


提取码:ch5y

复制这段内容后打开百度网盘手机App,操作更方便哦

2.添加jar包,右键点击jar包,找到“Add as Library…” -> “OK”。

在这里插入图片描述

在这里插入图片描述



Maven工程

若是Maven工程的话,找到pom.xml文件,直接添加依赖即可。

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

在这里插入图片描述



实战演练

我们打开Fast-json包,查看源码可以发现里面所有的方法都是静态方法,

可以用类名直接调用,即JSON.method()形式调用;

在这里插入图片描述

我们先创建一个名为“Person”的类:

/**
 * @author guqueyue
 * @Date 2020/4/4
 **/
public class Person {
    public String name;
    public int age;
}

注意:当涉及到JSON转换成Java对象时:



  • JSON中属性必须和Java对象中属性保持一致

  • 方法中有一个参数必定为

    反射对象

JSON(对象)字符串、JSON对象、Java对象之间的互相转换

转换图如下:

在这里插入图片描述

JSON字符串 -> JSON、Java对象:

String jsonString = "{name:'张总', age:18}";
JSONObject jsonObject = JSON.parseObject(jsonString);
Person person = JSON.parseObject(jsonString, Person.class);

JSON、Java对象 -> JSON字符串:

String jsonString1 = JSON.toJSONString(jsonObject);
String ObjectString = JSON.toJSONString(person);

JSON对象 -> Java对象:

var jsonObject = {name:"张总", age:18}; // Java中只能声明字符串再转换成JSON对象
Person person1 = JSON.toJavaObject(jsonObject, Person.class);

Java对象 -> JSON对象:

Person person2 = new Person();
person2.age = 11;
person2.name = "小飞侠"; 
JSONObject jsonObject1 = (JSONObject) JSON.toJSON(person2); // 强转

JSON(数组)字符串、JSON数组、Java集合之间的互相转换

转换图如下:

在这里插入图片描述

JSON字符串 -> JSON数组、Java集合:

String jsonString = "[{name:'吕总', age: 18}, {name:'张佬', age:19}]";
JSONArray jsonArray = JSON.parseArray(jsonString);
List<Person> personList = JSON.parseArray(jsonString, Person.class);

JSON数组、Java集合-> JSON字符串:

String jsonString1 = JSON.toJSONString(jsonArray);
String listString = JSON.toJSONString(personList);

Java集合 -> JSON数组:

JSONArray jsonArray1 = (JSONArray) JSON.toJSON(personList);

JSON数组 -> Java集合:

不能直接转,必须走绿色通道:

JSON数组 -> JSON字符串 -> Java集合

String arrayString = JSON.toJSONString(jsonArray1);
List<Person> personList1 = JSON.parseArray(arrayString, Person.class);



转换总图

在这里插入图片描述



扩展延伸

从Java集合中获取Java对象或者说从Java对象中取值,有一定Java基础的人都会,这里就不加赘述

此处演示的是:


  • 从JSON对象中取值

  • 从JSON数组中取出JSON对象

  • 如何快速从JOSN数组取出Java对象


从JSON对象中取值:

//DataType是key所对应value的数据类型
JsonObjectName.getDataType("key"); 

代码示例:

/**
 * @author guqueyue
 * @Date 2020/4/7
 * 从JSON对象中取值演示
 **/
public class JSONTest {
    public static void main(String[] args) {
        // 声明并赋值JSON字符串
        String jsonString = "{'name':'熊大', age:6}";
        // JSON字符串转换成JSON对象
        JSONObject jsonObject = JSON.parseObject(jsonString);
        // 分别取出name、age所对应的值
        String name = jsonObject.getString("name");
        int age = jsonObject.getInteger("age");
        // 打印到控制台
        System.out.println("name:" + name + ", age:" + age);
    }
}

Output:

在这里插入图片描述


从JSON数组中取出JSON对象:

jsonArrayName.getJSONObject(index); // index表示数组的索引

代码示例:

/**
 * @author guqueyue
 * @Date 2020/4/7
 * 从JSON数组中取出JSON对象演示
 **/
public class JSONTest2 {
    public static void main(String[] args) {
        // 声明JSON数组字符串并赋值
        String jsonString = "[{'name':'熊大', 'age':6}, {'name':'熊二', 'age':7}]";
        // 将JSON数组字符串解析成JSON数组
        JSONArray jsonArray = JSON.parseArray(jsonString);
        // 获取JSON数组长度
        int size = jsonArray.size();
        // 遍历JSON数组
        for (int i = 0; i < size; i++) {
            // 根据索引获取JSON对象
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            // 将JSON对象打印到控制台
            System.out.println(jsonObject);
        }
    }
}

Output:

在这里插入图片描述


将JOSN数组转换成Java对象:


一般大家很可能很容易想到的思路:JSON数组 -> JSON对象 -> Java对象

但是其实是可以直接取的:JSON数组 -> Java对象

// index为数组索引,Object.class为需要转换Java对象的反射对象
jsonArrayName.getObject(index, Object.class);

首先创建一个Java类,方便转换:

import lombok.Data;

/**
 * @author guqueyue
 * @Date 2020/4/7
 **/
@Data //lombok插件的注解,若是没有用lombok插件,请自行生成getter、setter方法
public class Person {
    private String name;
    private String age;
}

代码示例:

/**
 * @author guqueyue
 * @Date 2020/4/7
 * 从JSON数组中直接取出Java对象演示
 **/
public class TestJSON {
    public static void main(String[] args) {
        // 声明JSON字符串并赋值
        String jsonString = "[{'name':'张三', 'age':11}, {'name':'李四', 'age':13}]";
        // 将JSON字符串转换成JSON数组
        JSONArray jsonArray = JSON.parseArray(jsonString);
        // 遍历JSON数组
        for (int i = 0; i < jsonArray.size(); i++) {
            // 根据索引,从JSON数组中直接取出Java对象
            Person person = jsonArray.getObject(i, Person.class);
            // 打印到控制台
            System.out.println(person);
        }
    }
}

完事,Output:

在这里插入图片描述



版权声明:本文为Qizhi_Hu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。