Java中使用String.format如何将JSON对象作为参数插入格式化字符串
Java中向字符串模板传入JSON对象的实现方法
这个需求完全可以实现,核心逻辑非常简单:String.format 本身没有为JSON类型设计专属占位符,所有非基础类型的参数传入后,都会自动调用对象的toString()方法转为字符串,再替换对应占位符。只要你传入的JSON对象能输出合法的JSON格式字符串,直接用%s占位符承接即可。
基础实现示例
你之前用%d承接十进制整数、%s承接字符串的写法可以直接复用,只需要把对应参数位置换成你构建好的JSON对象就行,以最常用的org.json库构建的JSONObject为例:
import org.json.JSONObject; public class JsonInStringDemo { public static void main(String[] args) { // 构建自定义JSON载荷 JSONObject jsonPayload = new JSONObject(); jsonPayload.put("orderId", 32074); jsonPayload.put("payAmount", 99.9); jsonPayload.put("payStatus", "success"); String template = "本次上报的支付载荷为:%s"; // 直接传入JSON对象,%s会自动调用其重写后的toString()输出标准JSON String output = String.format(template, jsonPayload); System.out.println(output); // 打印结果:本次上报的支付载荷为:{"orderId":32074,"payAmount":99.9,"payStatus":"success"} } }
如果你用的是Jackson的ObjectNode、Gson的JsonObject等其他JSON库实现的JSON对象,操作逻辑完全一致——这些库的JSON对象类都已经重写了toString()方法,默认输出标准无缩进的JSON字符串,不需要额外做转换。
常见场景处理
- 如果需要输出带缩进的易读格式化JSON,可以调用JSON对象自带的缩进输出方法生成字符串后再传入,以org.json为例:
// 传入2表示每层缩进2个空格 String prettyJson = jsonPayload.toString(2); String prettyOutput = String.format("格式化后载荷:\n%s", prettyJson); /* 打印结果: 格式化后载荷: { "orderId": 32074, "payAmount": 99.9, "payStatus": "success" } */
- 如果要传入的是自定义Java实体类,不要直接把实体对象传给
%s——普通实体类默认的toString()不会输出JSON格式。需要先通过JSON库把实体序列化为JSON字符串,再传入模板:
import com.fasterxml.jackson.databind.ObjectMapper; // 自定义实体类 Order order = new Order(32074, 99.9, "success"); ObjectMapper mapper = new ObjectMapper(); // 先序列化为JSON字符串 String orderJson = mapper.writeValueAsString(order); String output = String.format("支付载荷:%s", orderJson);
注意事项
- 不要手动硬编码拼接JSON字符串作为参数,很容易出现引号转义错误、JSON格式非法的问题,优先用成熟JSON库构建对象或做序列化。
- 如果传入JSON对象后输出的内容不是合法JSON,先检查对应JSON类的
toString()方法是否被正确重写,有没有被其他代理类修改逻辑。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

