Java JSON 解析全面指南

目录

  1. 简介
  2. Java 解析 JSON 的方式
  3. JSON 解析与序列化示例
  4. 最佳实践
  5. 小结
  6. 参考资料

简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和易解析性。在 Java 生态中,解析 JSON 主要有以下几种方式:

  • org.json:官方提供的轻量级 JSON 处理库。
  • Jackson:功能强大,支持序列化、反序列化和数据绑定,是业界标准之一。
  • Gson:由 Google 提供,易用性强,适用于 Android 和 Java 项目。
  • Fastjson:阿里巴巴开发的高性能 JSON 处理库,适用于高并发应用场景。

接下来,我们将详细介绍如何在 Java 中使用这些库来解析和生成 JSON。


Java 解析 JSON 的方式

使用 org.json

org.json 是最简单的 JSON 解析库,适合轻量级应用。

依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

示例

import org.json.JSONObject;

public class OrgJsonExample {
    public static void main(String[] args) {
        String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
        
        // 解析 JSON 字符串
        JSONObject jsonObject = new JSONObject(jsonStr);
        System.out.println("姓名: " + jsonObject.getString("name"));
        System.out.println("年龄: " + jsonObject.getInt("age"));
        
        // 生成 JSON
        JSONObject newJson = new JSONObject();
        newJson.put("city", "Beijing");
        newJson.put("country", "China");
        System.out.println(newJson.toString());
    }
}

使用 Jackson

Jackson 是最流行的 JSON 处理库,功能强大,支持对象与 JSON 互转。

依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

示例

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        
        // JSON 转对象
        String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
        User user = objectMapper.readValue(jsonStr, User.class);
        System.out.println(user);

        // 对象转 JSON
        String jsonOutput = objectMapper.writeValueAsString(user);
        System.out.println(jsonOutput);
    }
}

class User {
    public String name;
    public int age;

    public User() {} // Jackson 需要默认构造器

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}

使用 Gson

Gson 由 Google 提供,API 简洁,适合 Android 项目。

依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10</version>
</dependency>

示例

import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {
        Gson gson = new Gson();
        
        // JSON 转对象
        String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
        User user = gson.fromJson(jsonStr, User.class);
        System.out.println(user);

        // 对象转 JSON
        String jsonOutput = gson.toJson(user);
        System.out.println(jsonOutput);
    }
}

使用 Fastjson

Fastjson 是阿里巴巴的高性能 JSON 解析库,适用于高并发场景。

依赖

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

示例

import com.alibaba.fastjson.JSON;

public class FastjsonExample {
    public static void main(String[] args) {
        // JSON 转对象
        String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
        User user = JSON.parseObject(jsonStr, User.class);
        System.out.println(user);

        // 对象转 JSON
        String jsonOutput = JSON.toJSONString(user);
        System.out.println(jsonOutput);
    }
}

JSON 解析与序列化示例

对象转 JSON

使用 Jackson:

ObjectMapper objectMapper = new ObjectMapper();
User user = new User("Alice", 25);
String jsonString = objectMapper.writeValueAsString(user);
System.out.println(jsonString);

使用 Gson:

Gson gson = new Gson();
String jsonString = gson.toJson(user);
System.out.println(jsonString);

JSON 转对象

使用 Jackson:

User user = objectMapper.readValue(jsonString, User.class);

使用 Gson:

User user = gson.fromJson(jsonString, User.class);

JSON 数组解析

String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
List<User> users = objectMapper.readValue(jsonArrayStr, new TypeReference<List<User>>() {});
System.out.println(users);

最佳实践

  1. 选择合适的 JSON 库

    • 轻量级应用:org.json
    • 全面功能:Jackson
    • Android 应用:Gson
    • 高性能需求:Fastjson
  2. 使用对象映射

    • 避免 Map<String, Object>,推荐使用 POJO(Plain Old Java Object)。
  3. 处理异常

    • JSON 解析时可能会抛出 JSONExceptionIOException,应使用 try-catch 进行异常处理。
  4. 使用 @JsonProperty

    • 在 Jackson 中,字段名与 JSON 不匹配时,可使用 @JsonProperty("json_name") 注解。
  5. 优化性能

    • 在高并发场景下,可使用 Jackson 的 ObjectMapper 作为单例对象。

小结

本篇文章介绍了 Java 解析 JSON 的几种方式,包括 org.jsonJacksonGsonFastjson,并提供了详细的示例和最佳实践。希望对你有所帮助!


参考资料

  1. Jackson 官方文档
  2. Gson 官方文档
  3. Fastjson 官方文档
  4. 在线JSON美化
posted @   hyzz123  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示