java 把对象转化为json字符串

在 Java 中将对象转换为 JSON 字符串是开发中的常见需求。以下是四种主流方法的对比与使用示例,帮助你根据项目需求选择合适方案。


1. Jackson(推荐,Spring Boot 默认)

引入依赖

复制代码
复制代码
<!-- Maven -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

示例代码

复制代码
复制代码
ObjectMapper mapper = new ObjectMapper();

// 对象转 JSON
String json = mapper.writeValueAsString(user);

// 带格式化的 JSON
String prettyJson = mapper.writerWithDefaultPrettyPrinter()
                          .writeValueAsString(user);

// JSON 转对象
User user = mapper.readValue(json, User.class);

// JSON 转 List
List<User> users = mapper.readValue(json, 
    new TypeReference<List<User>>() {});

常用配置

复制代码
复制代码
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 忽略 null
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

2. Gson(Google 出品)

引入依赖

复制代码
复制代码
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

示例代码

复制代码
复制代码
Gson gson = new Gson();

// 对象转 JSON
String json = gson.toJson(user);

// 带格式化的 JSON
String prettyJson = new GsonBuilder().setPrettyPrinting()
                                     .create()
                                     .toJson(user);

// JSON 转对象
User user = gson.fromJson(json, User.class);

// JSON 转 List
List<User> users = gson.fromJson(json, 
    new TypeToken<List<User>>() {}.getType());

常用配置

复制代码
复制代码
Gson gson = new GsonBuilder()
    .serializeNulls() // 序列化 null 值
    .setDateFormat("yyyy-MM-dd HH:mm:ss")
    .disableHtmlEscaping()
    .create();

3. Fastjson / Fastjson2(阿里巴巴)

引入依赖

复制代码
复制代码
<!-- Fastjson2(推荐,更安全) -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.40</version>
</dependency>

示例代码

复制代码
复制代码
// 对象转 JSON
String json = JSON.toJSONString(user);

// 带格式化的 JSON
String prettyJson = JSON.toJSONString(user, 
    JSONWriter.Feature.PrettyFormat);

// JSON 转对象
User user = JSON.parseObject(json, User.class);

// JSON 转 List
List<User> users = JSON.parseArray(json, User.class);

常用配置

复制代码
复制代码
// 忽略 null 值
String json = JSON.toJSONString(user, 
    JSONWriter.Feature.WriteMapNullValue);

⚠️ 注意:Fastjson 1.x 存在安全漏洞,建议使用 Fastjson2 或避免使用。


4. JSON-B(Java 标准,较少用)

引入依赖

复制代码
复制代码
<dependency>
    <groupId>org.eclipse</groupId>
    <artifactId>yasson</artifactId>
    <version>2.0.2</version>
</dependency>

示例代码

复制代码
复制代码
Jsonb jsonb = JsonbBuilder.create();

// 对象转 JSON
String json = jsonb.toJson(user);

// JSON 转对象
User user = jsonb.fromJson(json, User.class);

5. 方法对比

特性 Jackson Gson Fastjson2 JSON-B
性能 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
安全性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐(2.x) ⭐⭐⭐⭐⭐
Spring 集成 ✅ 默认支持
功能丰富度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
社区活跃度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
推荐度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐

6. 最佳实践建议

✅ 推荐工具类封装(以 Jackson 为例)

复制代码
复制代码
@Component
public class JsonUtil {
    private static final ObjectMapper mapper = new ObjectMapper();

    static {
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    }

    public static String toJson(Object obj) {
        try {
            return mapper.writeValueAsString(obj);
        } catch (Exception e) {
            throw new RuntimeException("JSON 转换失败", e);
        }
    }

    public static <T> T fromJson(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (Exception e) {
            throw new RuntimeException("JSON 解析失败", e);
        }
    }
}

✅ 控制字段序列化

复制代码
复制代码
public class User {
    @JsonIgnore              // 不序列化
    private String password;

    @JsonProperty("user_name") // 自定义字段名
    private String name;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
}

✅ 处理日期时间

复制代码
复制代码
// Java 8+ 推荐
private LocalDateTime createTime;

// 配置
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

7. 选择建议

场景 推荐方案
Spring Boot 项目 ✅ Jackson(默认)
对性能要求高 ✅ Fastjson2
Android 项目 ✅ Gson
需要 Java 标准兼容 ✅ JSON-B
通用、安全、稳定 ✅ Jackson

总结

  • 首选 Jackson:Spring Boot 默认集成,功能强大、社区活跃、安全性高。
  • 避免使用 Fastjson 1.x:存在已知安全漏洞。
  • 封装工具类:统一处理日期、空值等逻辑,提升可维护性。
  • 注意字段控制:使用注解控制序列化行为,避免敏感信息泄露。

根据你的项目类型和依赖环境选择合适的库,并始终注意安全性与可维护性。

相关推荐
AllData公司负责人10 小时前
通过Postgresql同步到Doris,全视角演示AllData数据中台核心功能效果,涵盖:数据入湖仓,数据同步,数据处理,数据服务,BI可视化驾驶舱
java·大数据·数据库·数据仓库·人工智能·python·postgresql
Moment10 小时前
面试官:如果产品经理给你多个需求,怎么让AI去完成❓❓❓
前端·后端·面试
每天吃饭的羊10 小时前
JSONP
前端
Hello.Reader10 小时前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法
gogoing10 小时前
ESLint 配置字段说明
前端·javascript
一只大袋鼠10 小时前
JavaWeb四种文件上传方式(下篇)
java·开发语言·springmvc·javaweb
gogoing10 小时前
CSS 属性值计算过程(Computed Value)
前端·css
gogoing10 小时前
webpack 的性能优化
前端·javascript
桃花键神10 小时前
Bright Data Web Scraping指南 2026: 使用 MCP + Dify 自动采集海外社交媒体数据
大数据·前端·人工智能
gogoing10 小时前
await fetch() 的两阶段设计
前端·javascript