杰瑞科技汇

Java字符串如何转JSON对象?

添加依赖库

你需要在你的项目中添加相应库的依赖,如果你使用 Maven 或 Gradle,可以这样添加:

Java字符串如何转JSON对象?-图1
(图片来源网络,侵删)

使用 Google Gson

Maven (pom.xml):

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

Gradle (build.gradle):

implementation 'com.google.code.gson:gson:2.10.1' // 建议使用最新版本

使用 Jackson

Maven (pom.xml):

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

Gradle (build.gradle):

Java字符串如何转JSON对象?-图2
(图片来源网络,侵删)
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' // 建议使用最新版本

将 JSON 字符串转换为 JsonObjectJsonElement (Gson)

当你只想解析一个 JSON 字符串并像操作 Map 一样访问其内容时,Gson 的 JsonObject 非常方便。

代码示例

假设我们有以下 JSON 字符串:

{
  "name": "张三",
  "age": 30,
  "isStudent": false,
  "courses": ["Java", "Python"],
  "address": {
    "city": "北京",
    "street": "中关村大街1号"
  }
}
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonArray;
public class GsonStringToJsonExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
        // 1. 创建 Gson 实例
        Gson gson = new Gson();
        // 方法一:直接解析为 JsonObject (更推荐,代码更简洁)
        JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
        // 方法二:使用 JsonParser (旧版本Gson常用,同样有效)
        // JsonElement jsonElement = JsonParser.parseString(jsonString);
        // JsonObject jsonObject = jsonElement.getAsJsonObject();
        // 2. 从 JsonObject 中获取数据
        String name = jsonObject.get("name").getAsString();
        int age = jsonObject.get("age").getAsInt();
        boolean isStudent = jsonObject.get("isStudent").getAsBoolean();
        System.out.println("姓名: " + name);
        System.out.println("年龄: " + age);
        System.out.println("是否是学生: " + isStudent);
        // 3. 获取数组
        JsonArray coursesArray = jsonObject.getAsJsonArray("courses");
        System.out.print("课程: ");
        for (int i = 0; i < coursesArray.size(); i++) {
            System.out.print(coursesArray.get(i).getAsString() + " ");
        }
        System.out.println();
        // 4. 获取嵌套的 JsonObject
        JsonObject addressObject = jsonObject.getAsJsonObject("address");
        String city = addressObject.get("city").getAsString();
        String street = addressObject.get("street").getAsString();
        System.out.println("地址: " + city + ", " + street);
    }
}

输出:

姓名: 张三
年龄: 30
是否是学生: false
课程: Java Python 
地址: 北京, 中关村大街1号

将 JSON 字符串转换为 Java 对象 (POJO)

这是更常用、更规范的方式,你首先需要创建一个与 JSON 结构对应的 Java 类(POJO - Plain Old Java Object),Gson/Jackson 可以自动将 JSON 字符串填充到这个对象中。

Java字符串如何转JSON对象?-图3
(图片来源网络,侵删)

创建 Java 类 (POJO)

// User.java
public class User {
    private String name;
    private int age;
    private boolean isStudent;
    private String[] courses; // 也可以使用 List<String>
    private Address address;
    // 必须有无参构造函数
    public User() {
    }
    // Getters and Setters (非常重要)
    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 boolean isStudent() { return isStudent; }
    public void setStudent(boolean student) { isStudent = student; }
    public String[] getCourses() { return courses; }
    public void setCourses(String[] courses) { this.courses = courses; }
    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                ", courses=" + Arrays.toString(courses) +
                ", address=" + address +
                '}';
    }
}
// Address.java
public class Address {
    private String city;
    private String street;
    // 必须有无参构造函数
    public Address() {
    }
    // Getters and Setters
    public String getCity() { return city; }
    public void setCity(String city) { this.city = city; }
    public String getStreet() { return street; }
    public void setStreet(String street) { this.street = street; }
    @Override
    public String toString() {
        return "Address{" +
                "city='" + city + '\'' +
                ", street='" + street + '\'' +
                '}';
    }
}

使用 Gson 进行转换

import com.google.gson.Gson;
public class GsonPojoExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
        Gson gson = new Gson();
        User user = gson.fromJson(jsonString, User.class);
        // 现在你可以直接使用 user 对象,就像操作任何其他 Java 对象一样
        System.out.println("姓名: " + user.getName());
        System.out.println("年龄: " + user.getAge());
        System.out.println("地址: " + user.getAddress().getCity());
        // 打印整个对象
        System.out.println(user);
    }
}

输出:

姓名: 张三
年龄: 30
地址: 北京
User{name='张三', age=30, isStudent=false, courses=[Java, Python], address=Address{city='北京', street='中关村大街1号'}}

使用 Jackson 进行转换

Jackson 的用法与 Gson 非常相似,核心类是 ObjectMapper

转换为 JsonNode (类似 Gson 的 JsonObject)

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonStringToJsonExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
        // 1. 创建 ObjectMapper 实例
        ObjectMapper mapper = new ObjectMapper();
        // 2. 将字符串解析为 JsonNode
        JsonNode rootNode = mapper.readTree(jsonString);
        // 3. 从 JsonNode 中获取数据
        String name = rootNode.get("name").asText();
        int age = rootNode.get("age").asInt();
        boolean isStudent = rootNode.get("isStudent").asBoolean();
        System.out.println("姓名: " + name);
        System.out.println("年龄: " + age);
        System.out.println("是否是学生: " + isStudent);
        // 获取嵌套节点
        JsonNode addressNode = rootNode.get("address");
        String city = addressNode.get("city").asText();
        System.out.println("地址: " + city);
    }
}

转换为 Java 对象 (POJO)

Jackson 使用完全相同的 User.javaAddress.java 类。

import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonPojoExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(jsonString, User.class);
        System.out.println("姓名: " + user.getName());
        System.out.println("年龄: " + user.getAge());
        System.out.println("地址: " + user.getAddress().getCity());
        System.out.println(user);
    }
}

总结与对比

特性 Google Gson Jackson
易用性 非常简单,API 直观,特别是 JsonObject 的使用。 非常强大,API 功能丰富,但学习曲线稍陡一点。
性能 性能良好,但在某些极端场景下可能略逊于 Jackson。 性能极高,是业界公认最快的 JSON 处理库之一,尤其在处理大数据时。
灵活性 非常灵活,可以轻松处理 JsonObjectPOJO 的混合场景。 非常灵活,提供了大量注解(如 @JsonProperty, @JsonFormat)来精确控制序列化和反序列化过程。
生态系统 广泛使用,社区活跃。 事实上的行业标准,Spring Framework 等众多顶级框架都内置使用 Jackson。
推荐场景 - 快速原型开发
- 项目对性能要求不是极致
- 喜欢 API 简洁性
- 高性能要求的 Web 应用 (如 REST API)
- 大型企业级应用
- Spring 生态系统项目

最终建议

  • 如果你是初学者,或者项目追求快速开发和简洁的代码,Gson 是一个绝佳的选择。
  • 如果你在构建高性能的后端服务,或者你已经在使用 Spring 框架,Jackson 是不二之选,它是事实上的标准。
  • 无论选择哪个,将 JSON 字符串映射到具体的 Java 对象(POJO) 是最佳实践,因为它提供了类型安全和更好的代码可维护性。
分享:
扫描分享到社交APP
上一篇
下一篇