杰瑞科技汇

Java JSON转String有哪些方法?

核心概念

  • JSON (JavaScript Object Notation):一种轻量级的数据交换格式,它易于人阅读和编写,也易于机器解析和生成。
  • String (字符串):Java 中用于表示文本的基本数据类型。

转换的本质就是将 JSON 格式的文本序列化(Serialize)为 Java 的 String 对象,或者将一个符合 JSON 格式的 String 反序列化(Deserialize)为 Java 对象(如 Map, List, 或自定义的 JavaBean)

Java JSON转String有哪些方法?-图1
(图片来源网络,侵删)

使用 Jackson (推荐)

Jackson 是目前 Java 生态中最流行、性能最好的 JSON 处理库之一,Spring Boot 等主流框架都默认集成了它。

添加依赖

您需要在你的项目中添加 Jackson 的核心库依赖,如果你使用 Maven (pom.xml):

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

Java 对象/Map/List 转换为 JSON 字符串

使用 ObjectMapper 类的 writeValueAsString() 方法。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class JacksonToStringExample {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        // 示例 1: 将 Java Map 转换为 JSON 字符串
        Map<String, Object> mapData = new HashMap<>();
        mapData.put("name", "张三");
        mapData.put("age", 30);
        mapData.put("isStudent", false);
        mapData.put("courses", new String[]{"数学", "英语"});
        try {
            String jsonStringFromMap = objectMapper.writeValueAsString(mapData);
            System.out.println("Map -> JSON String:");
            System.out.println(jsonStringFromMap);
            // 输出: {"name":"张三","age":30,"isStudent":false,"courses":["数学","英语"]}
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        // 示例 2: 将自定义 JavaBean 转换为 JSON 字符串
        User user = new User("李四", 25);
        try {
            String jsonStringFromObject = objectMapper.writeValueAsString(user);
            System.out.println("\nUser Object -> JSON String:");
            System.out.println(jsonStringFromObject);
            // 输出: {"name":"李四","age":25}
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
    // 自定义的 JavaBean
    static class User {
        private String name;
        private int age;
        // 构造器、Getter 和 Setter 是必须的
        public User() {}
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
        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; }
    }
}

JSON 字符串转换为 Java 对象/Map/List

使用 ObjectMapper 类的 readValue() 方法。

Java JSON转String有哪些方法?-图2
(图片来源网络,侵删)
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class JacksonFromStringExample {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = "{\"name\":\"王五\",\"age\":28,\"city\":\"北京\"}";
        // 示例 1: 将 JSON 字符串转换为 Java Map
        try {
            // 使用 TypeReference 来明确指定目标类型,避免类型擦除问题
            Map<String, Object> map = objectMapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
            System.out.println("JSON String -> Map:");
            System.out.println("Name: " + map.get("name")); // 输出: Name: 王五
            System.out.println("Age: " + map.get("age"));   // 输出: Age: 28
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        // 示例 2: 将 JSON 字符串转换为自定义 JavaBean
        String userJsonString = "{\"name\":\"赵六\",\"age\":32}";
        try {
            User user = objectMapper.readValue(userJsonString, User.class);
            System.out.println("\nJSON String -> User Object:");
            System.out.println("Name: " + user.getName()); // 输出: Name: 赵六
            System.out.println("Age: " + user.getAge());   // 输出: Age: 32
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
    static class User {
        private String name;
        private int age;
        // 无参构造器是必须的
        public User() {}
        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; }
    }
}

使用 Gson

Google 的 Gson 是另一个非常流行的 JSON 处理库,使用起来也非常简单。

添加依赖

Maven (pom.xml):

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

Java 对象/Map/List 转换为 JSON 字符串

使用 Gson 类的 toJson() 方法。

import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class GsonToStringExample {
    public static void main(String[] args) {
        Gson gson = new Gson();
        // 示例: 将 Java Map 转换为 JSON 字符串
        Map<String, Object> mapData = new HashMap<>();
        mapData.put("name", "钱七");
        mapData.put("age", 40);
        mapData.put("skills", new String[]{"Java", "Python"});
        String jsonString = gson.toJson(mapData);
        System.out.println("Map -> JSON String:");
        System.out.println(jsonString);
        // 输出: {"name":"钱七","age":40,"skills":["Java","Python"]}
    }
}

JSON 字符串转换为 Java 对象/Map/List

使用 Gson 类的 fromJson() 方法,并指定目标类型。

Java JSON转String有哪些方法?-图3
(图片来源网络,侵删)
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class GsonFromStringExample {
    public static void main(String[] args) {
        Gson gson = new Gson();
        String jsonString = "{\"name\":\"孙八\",\"age\":45,\"hobby\":\"读书\"}";
        // 示例 1: 将 JSON 字符串转换为 Java Map
        // 需要使用 TypeToken 来获取正确的类型
        Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
        Map<String, Object> map = gson.fromJson(jsonString, mapType);
        System.out.println("JSON String -> Map:");
        System.out.println("Name: " + map.get("name")); // 输出: Name: 孙八
        // 示例 2: 将 JSON 字符串转换为自定义 JavaBean
        User user = gson.fromJson("{\"name\":\"周九\",\"age\":50}", User.class);
        System.out.println("\nJSON String -> User Object:");
        System.out.println("Name: " + user.getName()); // 输出: Name: 周九
    }
    static class User {
        private String name;
        private int age;
        public User() {}
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
        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; }
    }
}

使用 org.json (简单轻量)

这是一个非常轻量级的库,适合简单的 JSON 操作,不需要复杂的对象映射。

添加依赖

Maven (pom.xml):

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20251013</version> <!-- 使用最新的稳定版本 -->
</dependency>

创建 JSON 字符串

这个库不直接从 Java 对象转换,而是通过构建 JSONObjectJSONArray 来生成 JSON 字符串。

import org.json.JSONObject;
import org.json.JSONArray;
public class OrgJsonToStringExample {
    public static void main(String[] args) {
        // 创建一个 JSONObject
        JSONObject person = new JSONObject();
        person.put("name", "吴十");
        person.put("age", 55);
        // 创建一个 JSONArray 并添加到 JSONObject
        JSONArray hobbies = new JSONArray();
        hobbies.put("游泳");
        hobbies.put("登山");
        person.put("hobbies", hobbies);
        // 使用 toString() 方法将其转换为 JSON 字符串
        String jsonString = person.toString();
        System.out.println("JSONObject -> JSON String:");
        System.out.println(jsonString);
        // 输出: {"name":"吴十","age":55,"hobbies":["游泳","登山"]}
    }
}

解析 JSON 字符串

将 JSON 字符串解析回 JSONObjectJSONArray

import org.json.JSONObject;
import org.json.JSONArray;
public class OrgJsonFromStringExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"郑十一\",\"age\":60,\"courses\":[\"历史\",\"地理\"]}";
        // 将字符串解析为 JSONObject
        JSONObject jsonObject = new JSONObject(jsonString);
        // 从 JSONObject 中获取值
        String name = jsonObject.getString("name");
        int age = jsonObject.getInt("age");
        System.out.println("JSON String -> JSONObject:");
        System.out.println("Name: " + name); // 输出: Name: 郑十一
        System.out.println("Age: " + age);   // 输出: Age: 60
        // 获取 JSONArray
        JSONArray courses = jsonObject.getJSONArray("courses");
        System.out.println("\nCourses:");
        for (int i = 0; i < courses.length(); i++) {
            System.out.println(courses.getString(i)); // 输出: 历史, 地理
        }
    }
}

总结与对比

特性 Jackson Gson org.json
流行度 非常高 (Spring Boot 默认) 非常高 (Google出品) 一般
性能 非常高 一般
易用性 简单,功能强大 非常简单 简单,但需要手动构建JSON结构
主要特点 强大的数据绑定、流式API、模块化 简洁的API,直接支持复杂对象转换 轻量级,专注于JSON本身,不依赖反射
适用场景 企业级应用、Web服务、高性能需求 通用场景,特别是与Google产品集成 简单脚本、快速原型、轻量级需求

如何选择?

  • 如果你正在使用 Spring Boot 或其他大型 Java 框架直接使用 Jackson,它已经为你准备好了,性能和功能都无与伦比。
  • 如果你需要一个简单、稳定且与 Google 生态关联的库选择 Gson,它的 API 设计非常直观,对于新手也很友好。
  • 如果你只需要做一些简单的 JSON 拼接和解析,不涉及复杂的 JavaBean 映射可以使用 org.json,它足够轻量,没有多余的功能。

对于绝大多数 Java 学习 Jackson 是最有价值的投资

分享:
扫描分享到社交APP
上一篇
下一篇