在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端数据交互、配置文件存储等场景,掌握JSON的拼接方法是Java开发者的基础技能之一,本文将系统介绍Java中JSON拼接的多种方式,包括原生拼接、使用第三方库(如Gson、Jackson、Fastjson)以及现代Java中流式API的应用,帮助开发者根据实际需求选择合适的方案。

原生字符串拼接:简单直接但易出错
对于简单的JSON结构,开发者有时会直接通过字符串拼接的方式构建JSON数据,这种方式无需依赖额外库,适合极简场景,但存在维护性差、易出错等问题。
示例场景:构建一个包含用户名和年龄的JSON对象{"name":"张三","age":25}。
String name = "张三";
int age = 25;
String json = "{\"name\":\"" + name + "\",\"age\":" + age + "}";
System.out.println(json);
注意事项:
- 转义问题:JSON中双引号需转义为
\",若字符串内容本身包含双引号,需额外处理,否则会导致格式错误。 - 类型安全:手动拼接时需注意数据类型转换(如
int类型直接拼接会自动转为字符串),但复杂类型(如嵌套对象、数组)的拼接会变得非常繁琐。 - 可读性差:当JSON结构层级较深时,字符串拼接代码难以阅读和维护,容易遗漏逗号或花括号。
使用Gson库:Google官方推荐的JSON处理工具
Gson是Google开源的JSON处理库,提供了便捷的API将Java对象转换为JSON字符串(序列化),也可将JSON字符串转换为Java对象(反序列化),其核心优势在于自动映射和类型安全,适合处理复杂JSON结构。
添加依赖
Maven项目中需在pom.xml中添加:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
基本拼接方式
Gson通过JsonObject类实现手动拼接,类似于Map的键值对存储方式。
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonExample {
public static void main(String[] args) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", "李四");
jsonObject.addProperty("age", 30);
// 添加嵌套对象
JsonObject address = new JsonObject();
address.addProperty("city", "北京");
address.addProperty("district", "朝阳区");
jsonObject.add("address", address);
// 添加数组
JsonArray hobbies = new JsonArray();
hobbies.add("阅读");
hobbies.add("游泳");
jsonObject.add("hobbies", hobbies);
String json = jsonObject.toString();
System.out.println(json);
}
}
输出结果:

{"name":"李四","age":30,"address":{"city":"北京","district":"朝阳区"},"hobbies":["阅读","游泳"]}
优势与适用场景
- 自动类型处理:
addProperty()方法支持基本数据类型自动转换,无需手动拼接。 - 嵌套结构友好:通过
JsonObject和JsonArray可轻松构建多层JSON结构。 - 可读性强:代码结构清晰,适合复杂JSON的构建。
使用Jackson库:高性能的JSON处理器
Jackson是另一个流行的JSON处理库,以其高性能和丰富的功能著称,常用于Spring框架中,与Gson类似,Jackson也支持手动拼接和对象序列化两种方式。
添加依赖
Maven依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
手动拼接JSON
Jackson通过ObjectMapper和JsonNode实现手动拼接:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
public class JacksonExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
root.put("name", "王五");
root.put("age", 28);
// 添加嵌套对象
ObjectNode address = mapper.createObjectNode();
address.put("city", "上海");
address.put("district", "浦东新区");
root.set("address", address);
// 添加数组
ArrayNode hobbies = mapper.createArrayNode();
hobbies.add("跑步");
hobbies.add("编程");
root.set("hobbies", hobbies);
String json = mapper.writeValueAsString(root);
System.out.println(json);
}
}
输出结果:
{"name":"王五","age":28,"address":{"city":"上海","district":"浦东新区"},"hobbies":["跑步","编程"]}
核心特点
- 高性能:Jackson的解析和生成速度较快,适合处理大数据量场景。
- 灵活的API:支持流式API(
JsonParser和JsonGenerator)处理JSON,内存占用低。 - 集成度高:与Spring Boot等框架无缝集成,默认用于HTTP请求/响应的JSON处理。
使用Fastjson库:阿里巴巴开源的高性能JSON库
Fastjson是阿里巴巴开源的JSON库,以其解析速度快、功能丰富著称,但需注意其安全性问题(如历史版本存在漏洞,建议使用最新版)。
添加依赖
Maven依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.40</version>
</dependency>
拼接JSON示例
Fastjson通过JSONObject和JSONArray类实现拼接:

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
public class FastjsonExample {
public static void main(String[] args) {
JSONObject json = new JSONObject();
json.put("name", "赵六");
json.put("age", 35);
// 添加嵌套对象
JSONObject address = new JSONObject();
address.put("city", "广州");
address.put("district", "天河区");
json.put("address", address);
// 添加数组
JSONArray hobbies = new JSONArray();
hobbies.add("旅游");
hobbies.add("摄影");
json.put("hobbies", hobbies);
String jsonString = json.toJSONString();
System.out.println(jsonString);
}
}
输出结果:
{"name":"赵六","age":35,"address":{"city":"广州","district":"天河区"},"hobbies":["旅游","摄影"]}
注意事项
- 安全性:Fastjson在反序列化时可能存在远程代码执行漏洞,建议使用1.2.83或2.0.40以上版本,并禁用
autoType功能。 - 性能优势:在序列化/反序列化速度上表现优异,适合对性能要求极高的场景。
现代Java中的流式API:无依赖的轻量级方案
Java 14引入了javax.json(JSON Processing API)和jakarta.json(Java EE 8+),提供了一套流式API处理JSON,无需额外依赖,适合轻量级项目。
示例代码(使用jakarta.json)
import jakarta.json.Json;
import jakarta.json.JsonObject;
import jakarta.json.JsonArrayBuilder;
import jakarta.json.JsonObjectBuilder;
public class JsonApiExample {
public static void main(String[] args) {
JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
jsonBuilder.add("name", "钱七");
jsonBuilder.add("age", 40);
// 添加嵌套对象
JsonObjectBuilder addressBuilder = Json.createObjectBuilder();
addressBuilder.add("city", "深圳");
addressBuilder.add("district", "南山区");
jsonBuilder.add("address", addressBuilder.build());
// 添加数组
JsonArrayBuilder hobbiesBuilder = Json.createArrayBuilder();
hobbiesBuilder.add("登山");
hobbiesBuilder.add("美食");
jsonBuilder.add("hobbies", hobbiesBuilder.build());
JsonObject json = jsonBuilder.build();
System.out.println(json.toString());
}
}
输出结果:
{"name":"钱七","age":40,"address":{"city":"深圳","district":"南山区"},"hobbies":["登山","美食"]}
优势
- 无依赖:作为Java标准API的一部分,无需引入第三方库,减少项目体积。
- 类型安全:通过Builder模式构建JSON,编译时检查类型错误。
总结与选择建议
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 原生字符串拼接 | 无需依赖,简单直接 | 易出错,维护性差 | 极简JSON结构,临时调试 |
| Gson | 官方推荐,自动类型映射 | 性能略低于Jackson | 复杂JSON构建,中小型项目 |
| Jackson | 高性能,流式API支持 | 学习曲线稍陡 | 大数据量,高性能要求,Spring项目 |
| Fastjson | 解析速度快,功能丰富 | 安全性问题(需注意版本) | 对性能要求极高的电商、金融系统 |
| Java流式API | 无依赖,轻量级 | 功能相对有限 | 无第三方依赖的轻量级项目 |
在实际开发中,若项目已使用Spring框架,优先选择Jackson;若追求快速开发且JSON结构复杂,Gson是不错的选择;对性能要求极高的场景可考虑Fastjson(需注意安全性);对于无依赖要求的轻量级项目,Java流式API是理想方案,无论选择哪种方式,都需注意JSON格式的规范性,确保数据交换的正确性和安全性。




















