如何使用FastJSON

目录

了解FastJSON

FastJSON的来源

FastJSON 的优点

FastJSON 的缺点

应用场景

如何使用FastJSON

添加依赖

1)Maven 项目中添加依赖

2)Gradle 项目中添加依赖

几种使用方式

1)解析 JSON 字符串为 Java 对象

2)处理嵌套的 JSON 结构(创建java对象)

3)处理嵌套的 JSON 结构(直接从 JSON 对象中获取值)

4)处理嵌套的 JSON 结构(使用路径表达式)


了解FastJSON

FastJSON的来源

FastJSON 是阿里巴巴弄出来的一个用 Java 语言写的处理 JSON 的工具。在 Java 开发里,处理 JSON 数据的需求可多了。阿里巴巴在弄那些企业级的应用和互联网服务的时候,就想要一个又快、功能又强还容易用的处理 JSON 的工具,所以他们的开发团队就搞出了 FastJSON。后来阿里巴巴把它开源了,让广大的 Java 开发者都能用,这样也能促进 Java 社区发展进步。随着时间变化,FastJSON 一直在发展完善,好多开发者都注意到它了,也爱用它,成了 Java 领域里很受欢迎的处理 JSON 的工具之一。

FastJSON 的优点
  1. 速度快:
    • 在众多 Java JSON 处理库中,FastJSON 以其高效的解析和生成 JSON 的速度而著称。它采用了一系列优化技术,如直接使用字节码生成技术、优化数据结构和算法等,使得在处理大规模 JSON 数据时具有明显的性能优势。
  1. 功能丰富:
    • 支持将 Java 对象与 JSON 字符串之间进行相互转换。可以将复杂的 Java 对象序列化为 JSON 字符串,也可以将 JSON 字符串反序列化为 Java 对象,包括自定义类、集合类型、嵌套结构等。
    • 支持多种数据类型的处理,包括基本数据类型、对象、数组、日期时间等。同时,还支持对 Java 对象中的字段进行灵活的配置,如忽略某些字段、指定字段的序列化和反序列化规则等。
  1. 易用性:
    • 提供了简洁的 API,使用起来非常方便。只需要几行代码就可以完成 Java 对象与 JSON 字符串之间的转换操作。例如,使用JSON.toJSONString(obj)可以将 Java 对象序列化为 JSON 字符串,使用JSON.parseObject(jsonStr, Class<T> clazz)可以将 JSON 字符串反序列化为 Java 对象。
  1. 兼容性:
    • 与其他 JSON 标准和库具有较好的兼容性。可以与其他基于 JSON 的系统和工具进行交互,例如与前端 JavaScript 框架进行数据交互、与数据库中的 JSON 数据进行操作等。
FastJSON 的缺点
  1. 安全问题:
    • 早期版本的时候,FastJSON 有一些安全漏洞,可能会被恶意弄的 JSON 数据攻击。虽然阿里巴巴一直在修这些漏洞,但用的时候还是得赶紧更新到最新版本,而且要注意检查输入的 JSON 数据是不是安全。
  1. 功能复杂性可能带来一些问题:
    • 由于 FastJSON 功能丰富,其配置选项也相对较多,对于一些新手开发者来说,可能需要花费一些时间来学习和理解这些配置选项。此外,在处理一些复杂的对象结构时,可能会出现一些意想不到的问题,需要开发者有一定的经验和调试能力。
  1. 社区支持相对有限:
    • 虽然 FastJSON 有一定的用户群体和社区支持,但与一些更广泛使用的开源项目相比,其社区规模可能相对较小。这可能导致在遇到一些问题时,获取帮助和解决方案的渠道相对有限。
应用场景
  1. Web 开发:
    • 在前后端分离的 Web 开发中,FastJSON 常用于将后端 Java 对象转换为 JSON 格式的数据,以便返回给前端进行展示或交互。同时,也可以将前端传来的 JSON 数据反序列化为 Java 对象,进行业务处理。
  1. 数据交换:
    • 当不同系统之间需要进行数据交换时,如果采用 JSON 作为数据格式,FastJSON 可以方便地进行数据的序列化和反序列化操作,确保数据在不同系统之间的正确传输和处理。
  1. 配置文件处理:
    • 一些应用程序可能使用 JSON 格式的配置文件。FastJSON 可以用来读取和解析这些配置文件,将其转换为 Java 对象,以便在应用程序中进行配置参数的获取和使用。
  1. 日志记录:
    • 在日志记录中,如果需要将复杂的对象信息以 JSON 格式记录下来,FastJSON 可以方便地将对象序列化为 JSON 字符串,然后写入日志文件或数据库中,方便后续的查询和分析。

如何使用FastJSON

添加依赖
1)Maven 项目中添加依赖

在 Maven 项目中使用 FastJSON,你可以在项目的 pom.xml 文件中添加以下依赖。

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

2)Gradle 项目中添加依赖

在 build.gradle 文件中添加

implementation 'com.alibaba:fastjson:1.2.83'

几种使用方式
1)解析 JSON 字符串为 Java 对象

存在一个json字符串:{"name":"John","age":30,"isStudent":false}


//定义一个 Java 类来对应这个 JSON 结构
class Person {
    private String name;
    private int age;
    private boolean isStudent;

    // 生成相应的 getter 和 setter 方法
}

直接从 JSON 对象中获取值

import com.alibaba.fastjson.JSONObject;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"name\":\"John\",\"age\":30,\"isStudent\":false}";
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        String name = jsonObject.getString("name");
        int age = jsonObject.getInteger("age");
        boolean isStudent = jsonObject.getBooleanValue("isStudent");

        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Is Student: " + isStudent);
    }
}

2)处理嵌套的 JSON 结构(创建java对象)

已知存在一个josn:{"person":{"name":"John","age":30},"address":{"city":"New York","country":"USA"}}

//定义对应的 Java 类
class Person {
    private String name;
    private int age;

    // getter 和 setter 方法
}

class Address {
    private String city;
    private String country;

    // getter 和 setter 方法
}

class RootObject {
    private Person person;
    private Address address;

    // getter 和 setter 方法
}

解析:

import com.alibaba.fastjson.JSON;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"person\":{\"name\":\"John\",\"age\":30},\"address\":{\"city\":\"New York\",\"country\":\"USA\"}}";
        RootObject rootObject = JSON.parseObject(jsonStr, RootObject.class);
        Person person = rootObject.getPerson();
        Address address = rootObject.getAddress();

        String name = person.getName();
        int age = person.getAge();
        String city = address.getCity();
        String country = address.getCountry();

        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("City: " + city);
        System.out.println("Country: " + country);
    }
}

3)处理嵌套的 JSON 结构(直接从 JSON 对象中获取值)

存在json串:

{"user":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.alibaba.fastjson.JSONObject;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"user\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";
        JSONObject jsonObject = JSON.parseObject(jsonStr);

        JSONObject userObject = jsonObject.getJSONObject("user");
        String userName = userObject.getString("name");
        int userAge = userObject.getInteger("age");

        JSONObject addressObject = userObject.getJSONObject("address");
        String city = addressObject.getString("city");
        String country = addressObject.getString("country");

        JSONArray ordersArray = jsonObject.getJSONArray("orders");
        for (int i = 0; i < ordersArray.size(); i++) {
            JSONObject orderObject = ordersArray.getJSONObject(i);
            int orderId = orderObject.getInteger("id");
            String product = orderObject.getString("product");
            System.out.println("Order ID: " + orderId + ", Product: " + product);
        }

        System.out.println("User Name: " + userName);
        System.out.println("User Age: " + userAge);
        System.out.println("City: " + city);
        System.out.println("Country: " + country);
    }
}

4)处理嵌套的 JSON 结构(使用路径表达式)

存在json串:

{"user":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.alibaba.fastjson.JSONPath;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"user\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";

        String userName = (String) JSONPath.read(jsonStr, "$.user.name");
        int userAge = (int) JSONPath.read(jsonStr, "$.user.age");
        String city = (String) JSONPath.read(jsonStr, "$.user.address.city");
        String country = (String) JSONPath.read(jsonStr, "$.user.address.country");

        Object[] orders = JSONPath.read(jsonStr, "$.orders");
        for (Object order : orders) {
            int orderId = (int) JSONPath.read(order, "$.id");
            String product = (String) JSONPath.read(order, "$.product");
            System.out.println("Order ID: " + orderId + ", Product: " + product);
        }

        System.out.println("User Name: " + userName);
        System.out.println("User Age: " + userAge);
        System.out.println("City: " + city);
        System.out.println("Country: " + country);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值