杰瑞科技汇

Java String如何高效转JSON?

这个过程的核心是使用一个JSON 库,目前最主流和推荐的库是 JacksonGson,下面我将详细介绍如何使用这两个库,并附上完整的代码示例。

Java String如何高效转JSON?-图1
(图片来源网络,侵删)

核心概念

  1. JSON 字符串: 一个符合 JSON 规范的字符串,{"name":"John", "age":30, "city":"New York"}
  2. Java 对象: 一个普通的 Java 类(POJO - Plain Old Java Object)的实例,或者 java.util.Mapjava.util.List 等集合对象。
  3. 解析/反序列化: 将 JSON 字符串转换成 Java 对象的过程。

使用 Jackson (推荐)

Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库之一,它被广泛用于 Spring Boot 等主流框架中。

添加 Maven 依赖

在你的 pom.xml 文件中添加 Jackson 的依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>

准备一个 Java 实体类

为了将 JSON 字符串映射到具体的对象,最好先创建一个与 JSON 结构对应的 Java 类。

// User.java
public class User {
    private String name;
    private int age;
    private String city;
    // 必须有无参构造函数,Jackson 在反序列化时会使用它
    public User() {
    }
    // 推荐:使用 getter 和 setter 方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    // 可选:重写 toString() 方法,方便打印和调试
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", city='" + city + '\'' +
                '}';
    }
}

执行转换

使用 ObjectMapper 类来完成转换。

Java String如何高效转JSON?-图2
(图片来源网络,侵删)
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
    public static void main(String[] args) {
        // 1. 准备一个 JSON 格式的字符串
        String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
        // 2. 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            // 3. 调用 readValue 方法进行转换
            // 参数1: JSON字符串
            // 参数2: 要转换成的Java对象的类型
            User user = objectMapper.readValue(jsonString, User.class);
            // 4. 验证结果
            System.out.println("转换成功!");
            System.out.println(user.getName()); // 输出: John
            System.out.println(user.getAge());  // 输出: 30
            System.out.println(user.getCity()); // 输出: New York
            System.out.println(user);          // 输出: User{name='John', age=30, city='New York'}
        } catch (JsonProcessingException e) {
            System.err.println("JSON 解析失败!");
            e.printStackTrace();
        }
    }
}

使用 Gson

Google 的 Gson 是另一个非常受欢迎的 JSON 库,以其简洁易用而闻名。

添加 Maven 依赖

pom.xml 文件中添加 Gson 依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>

准备 Java 实体类

Gson 也需要一个对应的 Java 类,与 Jackson 的要求类似(需要无参构造函数和 getter/setter)。

// User.java (与上面 Jackson 的示例相同)
public class User {
    private String name;
    private int age;
    private String city;
    public User() {
    }
    // ... getter 和 setter 方法 ...
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public String getCity() { return city; }
    public void setCity(String city) { this.city = city; }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", city='" + city + '\'' +
                '}';
    }
}

执行转换

使用 Gson 类来完成转换。

Java String如何高效转JSON?-图3
(图片来源网络,侵删)
import com.google.gson.Gson;
public class GsonExample {
    public static void main(String[] args) {
        // 1. 准备一个 JSON 格式的字符串
        String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
        // 2. 创建 Gson 实例
        Gson gson = new Gson();
        // 3. 调用 fromJson 方法进行转换
        // 参数1: JSON字符串
        // 参数2: 要转换成的Java对象的类型
        User user = gson.fromJson(jsonString, User.class);
        // 4. 验证结果
        System.out.println("转换成功!");
        System.out.println(user.getName()); // 输出: John
        System.out.println(user.getAge());  // 输出: 30
        System.out.println(user.getCity()); // 输出: New York
        System.out.println(user);          // 输出: User{name='John', age=30, city='New York'}
    }
}

转换为 MapList

JSON 结构是动态的,或者你不想创建对应的 Java 类,这时,可以直接将其转换为 MapList

示例:使用 Jackson 转换为 Map

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class JsonToMapExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        // 使用 TypeReference 来指定泛型类型,这是关键!
        // 如果直接写 Map.class, Jackson 会不知道 Map 的 Value 类型是 String, Integer 还是其他。
        Map<String, Object> dataMap = objectMapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
        System.out.println("转换后的 Map: " + dataMap);
        System.out.println("Name: " + dataMap.get("name")); // 输出: Name: John
        System.out.println("Age: " + dataMap.get("age"));   // 输出: Age: 30 (类型是 Integer)
    }
}

示例:使用 Gson 转换为 Map

Gson 的处理方式更直接。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class JsonToMapGsonExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
        Gson gson = new Gson();
        // 使用 TypeToken 来指定泛型类型
        Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
        Map<String, Object> dataMap = gson.fromJson(jsonString, mapType);
        System.out.println("转换后的 Map: " + dataMap);
        System.out.println("Name: " + dataMap.get("name")); // 输出: Name: John
        System.out.println("Age: " + dataMap.get("age"));   // 输出: Age: 30 (类型是 Double)
    }
}

总结与对比

特性 Jackson Gson
流行度 非常高,Spring Boot 默认使用 非常高,Google出品
性能 通常更快,功能更全面 性能也很好,但略逊于 Jackson
易用性 API 功能强大,但初次使用时 TypeReference 可能稍显复杂 非常简洁直观,API 设计简单
灵活性 极高,支持流式 API、树模型、数据绑定等多种方式 主要专注于数据绑定,简洁
推荐场景 新项目,特别是使用 Spring Boot 等框架的项目 需要快速集成,或者项目对简洁性要求高

如何选择?

  • 新项目,尤其是使用 Spring Boot 的强烈推荐 Jackson,它是事实上的标准,与生态系统集成得最好。
  • 追求极致简洁:Gson 是一个非常好的选择,几行代码就能完成转换。
  • 旧项目维护:根据项目已有的依赖来决定,保持一致性最重要。

无论选择哪个库,核心步骤都是:

  1. 添加依赖
  2. 创建一个与 JSON 结构匹配的 Java 类(或使用 Map/List
  3. 实例化库的核心类(ObjectMapper / Gson
  4. 调用核心方法(readValue / fromJson)进行转换
分享:
扫描分享到社交APP
上一篇
下一篇