StringBuilder 在 JSON 场景中不参与解析,仅用于解析后高效拼接提取的字段值;应避免拼接原始 JSON,而应在安全解析后组装日志、CSV 等自定义输出,并配合预估容量、流式解析与 setLength(0) 复用以提升性能。

StringBuilder 本身不参与 JSON 解析,它只是字符串拼接工具;在 JSON 解析场景中高效使用 StringBuilder 的关键,是避免在解析过程中频繁创建临时字符串,而将拼接逻辑放在“提取值之后、组装结果之前”的合适环节。
不要用 StringBuilder 拼接原始 JSON 文本
JSON 解析器(如 Jackson、Gson、Fastjson)负责将 JSON 字符串转为 Java 对象或树结构。直接用 StringBuilder 拼接未解析的 JSON 字符串(比如手动截取字段)极易出错——引号、转义、嵌套结构都会导致格式损坏。这不是高效,而是危险。
- ❌ 错误做法:读取 JSON 字符串后,用 indexOf + substring + StringBuilder 拼接某个字段值
- ✅ 正确路径:先用标准解析器安全提取属性值(String、Number 等),再用 StringBuilder 组装你真正需要的输出(如日志、摘要、CSV 行等)
在解析后批量构建自定义输出时用 StringBuilder
当你从多个 JSON 对象中提取字段,并需拼成一行文本(如日志记录、导出内容),StringBuilder 比字符串拼接快得多。
- 例如:解析一批用户 JSON,拼接为 "id:name:email" 格式的一行日志
- 建议先用 Jackson 的 JsonNode 或 Gson 的 JsonObject 提取字段,再逐个 append 到 StringBuilder,中间用分隔符连接
- 初始化 StringBuilder 时预估容量(如 new StringBuilder(256)),减少扩容开销
配合流式解析(JsonParser)边读边拼接
对超大 JSON 文件,用流式解析器(如 Jackson 的 JsonParser)可避免全量加载。当定位到目标字段时,直接读取其值并 append 到 StringBuilder —— 这种方式内存友好且高效。
立即学习“Java免费学习笔记(深入)”;
- 用 parser.nextToken() 跳过无关 token,遇到 FIELD_NAME 后判断是否为目标字段名
- 确认字段名匹配后,调用 parser.getText() 获取值,再 append 到 StringBuilder
- 全程不构造中间 String 对象(getText() 返回的是内部 char[] 的视图,append 是高效拷贝)
注意 toString() 的调用时机和不可变性
StringBuilder 是可变对象,多次解析循环中复用它能省 GC 压力,但必须注意重置:
- 每次新拼接前调用 setLength(0),比新建 StringBuilder 更轻量
- 仅在最终需要字符串结果时调用 toString() —— 它会创建新 String 对象,别在循环内反复调用
- 不要把 StringBuilder 当作 JSON 构建器(如拼接 {, }, :, , 等符号来造 JSON),应交由 JsonGenerator 完成


















