不建议用 stringbuilder 手动拼接 json,应优先使用 jackson 等成熟库构造对象后序列化;仅在极特殊场景下谨慎使用 stringbuilder,并严格处理转义、逗号、括号配对及类型规则。

在 Java 中动态拼装复杂 JSON 报文时,不建议直接用 StringBuilder 手动拼接,因为极易出错(如引号转义、逗号遗漏、嵌套结构错位、空值处理不当等),JSON 格式稍有偏差就会导致解析失败。真正规范的做法是:优先使用成熟 JSON 库(如 Jackson、Gson 或 org.json)构造对象再序列化;仅在极特殊场景(如性能敏感、无依赖限制、结构极度固定)下谨慎使用 StringBuilder,且必须配合严格模板和转义逻辑。
避免手动拼 JSON 的核心原因
JSON 是结构化文本,不是普通字符串。手动拼接会面临:
- 双引号、反斜杠、换行符、制表符等必须正确转义(如
"→",→\n) - 对象末尾不能多逗号、数组开头结尾括号必须成对、键名必须加双引号
- null/数字/布尔/字符串的表示规则不同(
null不加引号,true不加引号,字符串必须加引号并转义) - 嵌套层级加深后,缩进、换行、括号匹配极易混乱,调试困难
推荐方案:用 Jackson 构建再序列化(最规范)
这是工业级首选。定义 POJO 或用 ObjectNode 动态构建,交由 Jackson 处理格式与转义:
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
root.put("id", 123);
root.put("name", "张"三"); // 自动转义
root.put("active", true);
ArrayNode items = root.putArray("items");
items.add(mapper.createObjectNode().put("code", "A01").put("qty", 5));
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root);
优势:零手写引号、自动转义、类型安全、支持注解控制序列化、可配缩进/日期格式/空值策略。
若必须用 StringBuilder:只用于简单、静态、已知结构的场景
例如生成固定字段的日志上报模板、HTTP 请求体中少量常量参数。务必遵守以下约束:
- 所有 key 和 string 值必须显式调用
escapeJsonString()方法转义(不可靠的正则替换不如专用工具) - 用状态变量跟踪是否需加逗号(如
boolean first = true;,拼字段前判断if (!first) sb.append(","); first = false;) - 括号/中括号严格配对,每层开始前 append 开符号,结束时 append 闭符号
- 数值、布尔、null 直接拼(
sb.append(123)、sb.append("true")、sb.append("null")),字符串必须包裹双引号并转义
示例片段(不推荐但可参考):
private static String escapeJsonString(String s) {
if (s == null) return "";
return s.replace("\", "\\")
.replace(""", "\"")
.replace("
", "\n")
.replace("
", "\r")
.replace(" ", "\t");
}
// 拼 {"name":"a"b","age":25}
StringBuilder sb = new StringBuilder("{");
sb.append(""name":"").append(escapeJsonString("a"b")).append(""");
sb.append(",");
sb.append(""age":").append(25);
sb.append("}");
补充建议:统一入口 + 单元测试
即使选择 StringBuilder 方案,也应:
- 封装为工具方法(如
JsonBuilder.object().field("k", v).array("arr", list).build()),禁止散落在业务代码中 - 对每个拼接逻辑编写单元测试,覆盖含引号、换行、null、特殊字符的 case
- 在 CI 中加入 JSON 格式校验(如用 Jackson
readTree()尝试解析结果,失败即报错)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











