杰瑞科技汇

Java中如何将JSON转换为字符串?

Java 中最流行和推荐使用的 JSON 库是 JacksonGsonFastjson,下面我将分别介绍这三个库的使用方法,并给出完整的代码示例。

Java中如何将JSON转换为字符串?-图1
(图片来源网络,侵删)

使用 Jackson (推荐)

Jackson 是目前 Java 生态中最主流、性能最好的 JSON 处理库,Spring Boot 等主流框架都默认使用它。

步骤:

  1. 添加依赖 如果你使用 Maven,在 pom.xml 中添加:

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

    如果你使用 Gradle,在 build.gradle 中添加:

    implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' // 使用最新版本
  2. 编写 Java 代码 Jackson 提供了 ObjectMapper 类,它是核心工具类。

    Java中如何将JSON转换为字符串?-图2
    (图片来源网络,侵删)

    示例 1:将 Map 转换成 JSON 字符串

    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import java.util.HashMap;
    import java.util.Map;
    public class JacksonMapToJson {
        public static void main(String[] args) {
            // 1. 创建 ObjectMapper 实例
            ObjectMapper objectMapper = new ObjectMapper();
            // 2. 创建一个 Map 作为数据源
            Map<String, Object> dataMap = new HashMap<>();
            dataMap.put("name", "张三");
            dataMap.put("age", 30);
            dataMap.put("isStudent", false);
            dataMap.put("courses", new String[]{"数学", "语文"});
            try {
                // 3. 使用 writeValueAsString 方法进行转换
                // 默认格式化,没有缩进
                String jsonString = objectMapper.writeValueAsString(dataMap);
                System.out.println("默认格式的 JSON 字符串:");
                System.out.println(jsonString);
                // 4. 使用 writerWithDefaultPrettyPrinter 进行美化输出(带缩进)
                String prettyJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataMap);
                System.out.println("\n美化后的 JSON 字符串:");
                System.out.println(prettyJsonString);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
    }

    示例 2:将自定义对象 (POJO) 转换成 JSON 字符串

    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    // 1. 定义一个简单的 Java 类 (POJO)
    class User {
        private String name;
        private int age;
        private String email;
        // 必须有无参构造函数
        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 getEmail() { return email; }
        public void setEmail(String email) { this.email = email; }
        // 可选:重写 toString 方法方便打印
        @Override
        public String toString() {
            return "User{" + "name='" + name + '\'' + ", age=" + age + ", email='" + email + '\'' + '}';
        }
    }
    public class JacksonPojoToJson {
        public static void main(String[] args) {
            ObjectMapper objectMapper = new ObjectMapper();
            // 创建 User 对象
            User user = new User();
            user.setName("李四");
            user.setAge(25);
            user.setEmail("lisi@example.com");
            try {
                // 将 User 对象转换为 JSON 字符串
                String jsonString = objectMapper.writeValueAsString(user);
                System.out.println("User 对象的 JSON 字符串:");
                System.out.println(jsonString);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
    }

使用 Gson

Google 的 Gson 库也非常流行,使用简单直观。

步骤:

  1. 添加依赖 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' // 使用最新版本
  2. 编写 Java 代码 Gson 的核心是 Gson 类。

    示例 1:将 Map 转换成 JSON 字符串

    import com.google.gson.Gson;
    import java.util.HashMap;
    import java.util.Map;
    public class GsonMapToJson {
        public static void main(String[] args) {
            // 1. 创建 Gson 实例
            Gson gson = new Gson();
            // 2. 创建 Map 数据源
            Map<String, Object> dataMap = new HashMap<>();
            dataMap.put("name", "王五");
            dataMap.put("age", 40);
            dataMap.put("isStudent", false);
            dataMap.put("courses", new String[]{"英语", "物理"});
            // 3. 使用 toJson 方法进行转换
            String jsonString = gson.toJson(dataMap);
            System.out.println("JSON 字符串:");
            System.out.println(jsonString);
            // Gson 默认不提供美化输出的便捷方法,需要手动处理或使用其他库
        }
    }

    示例 2:将自定义对象 (POJO) 转换成 JSON 字符串

    import com.google.gson.Gson;
    // 使用和 Jackson 示例中相同的 User 类
    class User {
        private String name;
        private int age;
        private String email;
        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; }
        public String getEmail() { return email; }
        public void setEmail(String email) { this.email = email; }
    }
    public class GsonPojoToJson {
        public static void main(String[] args) {
            Gson gson = new Gson();
            User user = new User();
            user.setName("赵六");
            user.setAge(28);
            user.setEmail("zhaoliu@example.com");
            // 将 User 对象转换为 JSON 字符串
            String jsonString = gson.toJson(user);
            System.out.println("User 对象的 JSON 字符串:");
            System.out.println(jsonString);
        }
    }

使用 Fastjson (阿里巴巴)

Fastjson 是由阿里巴巴开发的一个高性能 JSON 库,在国内使用非常广泛。但请注意,Fastjson 曾有多个高危漏洞,虽然新版本已修复,但在选择时仍需考虑安全性。

步骤:

  1. 添加依赖 Maven (pom.xml):

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version> <!-- 使用最新稳定版本 -->
    </dependency>

    Gradle (build.gradle):

    implementation 'com.alibaba:fastjson:1.2.83' // 使用最新稳定版本
  2. 编写 Java 代码 Fastjson 的 API 非常简洁。

    示例 1:将 Map 转换成 JSON 字符串

    import com.alibaba.fastjson.JSON;
    import java.util.HashMap;
    import java.util.Map;
    public class FastjsonMapToJson {
        public static void main(String[] args) {
            // 1. 创建 Map 数据源
            Map<String, Object> dataMap = new HashMap<>();
            dataMap.put("name", "钱七");
            dataMap.put("age", 35);
            dataMap.put("isStudent", false);
            dataMap.put("courses", new String[]{"化学", "生物"});
            // 2. 使用 JSON.toJSONString 方法进行转换
            String jsonString = JSON.toJSONString(dataMap);
            System.out.println("JSON 字符串:");
            System.out.println(jsonString);
            // Fastjson 提供了简单的美化输出方式
            String prettyJsonString = JSON.toJSONString(dataMap, true); // 第二个参数 true 表示美化
            System.out.println("\n美化后的 JSON 字符串:");
            System.out.println(prettyJsonString);
        }
    }

    示例 2:将自定义对象 (POJO) 转换成 JSON 字符串

    import com.alibaba.fastjson.JSON;
    // 使用和前面相同的 User 类
    class User {
        private String name;
        private int age;
        private String email;
        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; }
        public String getEmail() { return email; }
        public void setEmail(String email) { this.email = email; }
    }
    public class FastjsonPojoToJson {
        public static void main(String[] args) {
            User user = new User();
            user.setName("孙八");
            user.setAge(22);
            user.setEmail("sunba@example.com");
            // 将 User 对象转换为 JSON 字符串
            String jsonString = JSON.toJSONString(user);
            System.out.println("User 对象的 JSON 字符串:");
            System.out.println(jsonString);
        }
    }

总结与对比

特性 Jackson Gson Fastjson
流行度 非常高 (Spring Boot 默认) 非常高 国内非常高
性能 非常优秀 优秀 非常优秀
易用性 API 丰富,功能强大 API 简洁直观 API 极其简洁
灵活性 高,支持复杂配置 中等 高,支持注解等
安全性 相对安全 相对安全 曾存在高危漏洞,新版本已修复,但需谨慎
美化输出 writerWithDefaultPrettyPrinter() 无直接方法,需手动处理 JSON.toJSONString(obj, true)
推荐场景 新项目首选,特别是 Spring 生态项目 简单项目,或对 Google 技术栈有偏好的项目 国内电商、互联网公司项目,但需关注安全动态

对于大多数新项目,Jackson 是最稳妥、功能最全面的选择,如果你只需要一个非常简单的 JSON 处理工具,Gson 是个不错的选择,如果你在国内工作,并且项目团队已经在使用 Fastjson,那么继续使用它也可以,但务必保持库版本为最新,并关注其安全公告。

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