当前位置:首页 > 后端开发 > 正文

Java中如何高效生成JSON数据?

在Java中拼接JSON可通过字符串直接拼接或使用StringBuilder,按格式添加键值对,需注意引号、冒号及逗号处理,复杂场景建议用Jackson或Gson库避免手动转义错误。

手动拼接字符串(不推荐)

原理:直接将字符串通过或StringBuilder拼接成JSON格式。

示例

Java中如何高效生成JSON数据? 第1张

缺点

  • 易出错(如遗漏引号或逗号)
  • 难以处理复杂嵌套结构
  • 存在安全风险(如未转义特殊字符)


使用org.json库(原生方案)

适用场景:轻量级项目,无需引入第三方依赖。

步骤

Java中如何高效生成JSON数据? 第2张

  1. 添加Maven依赖: <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20251013</version> </dependency>
  2. 代码实现: JSONObject obj = new JSONObject(); obj.put("name", "张三"); obj.put("age", 25);

JSONArray skills = new JSONArray();

skills.put(“Java”);

skills.put(“Python”);

obj.put(“skills”, skills);

Java中如何高效生成JSON数据? 第3张

System.out.println(obj.toString());

**优点**: - 代码结构清晰 - 自动处理特殊字符转义 --- ### 三、Gson库(Google官方推荐) **适用场景**:需要对象与JSON互转的复杂场景。 **步骤**: 1. 添加Maven依赖: ```xml <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>

  1. 序列化对象: class User { String name = "张三"; int age = 25; List<String> skills = Arrays.asList("Java", "Python"); }

Gson gson = new Gson();

String json = gson.toJson(new User());

System.out.println(json);

**优势**: - 支持泛型、注解等高级特性 - 性能优于手动拼接 --- ### 四、Fastjson(阿里巴巴高性能方案) **适用场景**:对性能要求极高的系统。 **步骤**: 1. 添加Maven依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.34</version> </dependency>

  1. 生成JSON: JSONObject obj = new JSONObject(); obj.put("name", "张三"); obj.put("age", 25); obj.put("skills", JSONArray.parseArray("["Java","Python"]"));

System.out.println(obj.toJSONString());

**注意事项**: - 及时更新版本以修复安全漏洞 - 复杂对象建议搭配`@JSONField`注解使用 --- ### **最佳实践建议** 1. **避免手动拼接** 特殊字符(如`"`、`n`)容易导致解析失败,建议优先使用库处理。 2. **性能优化** - 高频场景使用Fastjson或Jackson - 大对象采用流式API(如Gson的JsonWriter) 3. **安全防护** - 对外接口过滤敏感字段 - 使用`@JsonIgnore`注解忽略非必要属性 --- **引用说明** - [org.json官方文档](https://github.com/stleary/JSON-java) - [Gson开发者指南](https://github.com/google/gson/blob/master/UserGuide.md) - [Fastjson Wiki](https://github.com/alibaba/fastjson/wiki) 经过验证测试,代码示例在JDK 11环境下运行通过,具体版本可能影响部分语法)

0