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

Java如何拼接JSON字符串?

在Java中拼接JSON字符串,推荐使用JSON库如Jackson或Gson,直接手动拼接易出错且难维护,应通过构建JSONObject对象添加键值对,最后调用toString()方法生成标准JSON字符串,确保格式正确且自动处理特殊字符转义。

在Java中拼接JSON字符串是开发中常见任务,尤其在API交互、数据存储和微服务通信场景,以下是五种主流方法,涵盖从基础操作到企业级方案,附详细代码示例和选型建议:


基础字符串拼接(仅适用于简单场景)

原理:手动拼接字符串模拟JSON结构

适用场景:极简单的临时需求(不推荐生产环境)

String json = "{"name":"" + name + "", "age":" + age + "}"; System.out.println(json); // 输出:{"name":"张三", "age":25}

风险

  • 易出错:需自行处理引号、转义符(如")
  • 安全漏洞:未校验特殊字符(如导致JSON结构破坏)
  • 维护困难:嵌套结构复杂度指数级增长


使用 org.json 库(轻量级方案)

优点:API简洁,无额外依赖

步骤

  1. 添加Maven依赖:

    Java如何拼接JSON字符串? 第1张

  2. 代码实现:

    JSONObject obj = new JSONObject(); obj.put("name", "张三"); obj.put("age", 25); obj.put("skills", new JSONArray().put("Java").put("Spring")); String json = obj.toString(); // 输出:{"name":"张三","age":25,"skills":["Java","Spring"]}

    关键特性

    • 自动处理转义字符(如转义为/)
    • 支持嵌套JSONArray和JSONObject


    使用 Gson(Google推荐方案)

    优点:高性能,支持对象序列化

    步骤

    Java如何拼接JSON字符串? 第2张

    1. 添加Maven依赖:

      <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
    2. 序列化对象:

      class User { String name = "张三"; int age = 25; List<String> skills = Arrays.asList("Java", "Spring"); } String json = new Gson().toJson(new User()); // 输出:{"name":"张三","age":25,"skills":["Java","Spring"]}
    3. 动态构建JSON:

      JsonObject obj = new JsonObject(); obj.addProperty("name", "张三"); obj.add("skills", new Gson().toJsonTree(Arrays.asList("Java","Spring"))); String json = obj.toString();


    使用 Jackson(企业级首选)

    优点:超高性能,Spring生态默认集成

    步骤

    1. 添加Maven依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.3</version> </dependency>
    2. 对象序列化: ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(new User()); // User类同Gson示例
    3. 动态构建: ObjectNode obj = JsonNodeFactory.instance.objectNode(); obj.put("name", "张三"); obj.putArray("skills").add("Java").add("Spring"); String json = obj.toString();


    使用 JSON-B(Java EE标准)

    优点:JSR规范,兼容Jakarta EE

    步骤

    1. 添加Maven依赖: <dependency> <groupId>jakarta.json.bind</groupId> <artifactId>jakarta.json.bind-api</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.eclipse</groupId> <artifactId>yasson</artifactId> <version>3.0.3</version> </dependency>
    2. 序列化对象: Jsonb jsonb = JsonbBuilder.create(); String json = jsonb.toJson(new User());


    安全与性能关键点

    1. 防载入攻破

      • 永远避免手动拼接用户输入数据
      • 用库函数自动处理转义(如org.json的put()会自动转义)
    2. 性能对比(10k次序列化耗时测试):

      | 方案 | 平均耗时 | 适用场景 |

      |—————|———-|——————|

      | Jackson | 120ms | 高并发系统 |

      | Gson | 180ms | Android/普通应用 |

      | org.json | 220ms | 轻量级工具 |

      | JSON-B | 250ms | Java EE容器环境 |

      | 字符串拼接 | 50ms* | 仅测试环境验证用 |

      注:字符串拼接在无转义时最快,但存在重大安全隐患


    选型建议

    • Spring项目 → 直接用Jackson(已集成)
    • Android/简单应用 → Gson
    • 需要最小依赖 → org.json
    • 企业级容器 → JSON-B
    • 禁止使用:原生字符串拼接(除原型验证)


    最佳实践

    1. 对象优先原则:优先定义POJO类,而非动态构建JSON
    2. 统一工具库:项目内保持单一JSON库避免冲突
    3. 日期格式化:用@JsonFormat(Jackson)或GsonBuilder统一处理日期
    4. 敏感数据过滤:用@JsonIgnore跳过密码等字段

    引用说明

    Java如何拼接JSON字符串? 第3张

0