
使用 JayWay JsonPath 向 JSON 数组中插入对象时,必须调用 .json() 方法提取原始 Java 对象(如 Map 或 List),而非直接传入 JsonPath 解析器实例或 JSON 字符串,否则会导致字符串转义或空对象插入。
使用 jayway jsonpath 向 json 数组中插入对象时,必须调用 `.json()` 方法提取原始 java 对象(如 map 或 list),而非直接传入 jsonpath 解析器实例或 json 字符串,否则会导致字符串转义或空对象插入。
在 JayWay JsonPath 中,JsonPath.parse(...) 返回的是一个 ConfigurationAwareContext(即 DocumentContext)对象,它封装了 JSON 数据但不等同于可直接插入的 Java 原生结构。若将该上下文对象直接作为值传入 add() 方法,JsonPath 会尝试序列化其内部结构,结果常为 {};若传入 JSON 字符串,则会被当作普通字符串添加,导致双引号转义、类型错误。
✅ 正确做法是:先解析目标子对象,再通过 .json() 方法获取其对应的 Java 对象(如 LinkedHashMap<string object></string>),最后将其作为值插入目标路径:
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
public class JsonPathInsertExample {
public static void main(String[] args) {
// 初始化原始 JSON:空 students 数组
DocumentContext context = JsonPath.parse("{\"students\": []}");
// 构造待插入对象并提取其 Java 表示
Object entryToAdd = JsonPath.parse("{\"id\": 1, \"name\": \"Bob\"}").json();
// 插入到 students 数组末尾(路径 "students" 自动识别为数组并追加)
String result = context.add("students", entryToAdd).jsonString();
System.out.println(result);
// 输出:{"students":[{"id":1,"name":"Bob"}]}
}
}
⚠️ 注意事项:
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
-
context.add(path, value)要求value是 Java 原生类型(Map、List、String、Number、Boolean或null),不能是DocumentContext实例; -
.json()方法返回的是反序列化后的对象树(默认使用 Jackson,返回LinkedHashMap/ArrayList),确保类型兼容; - 若需批量插入多个对象,可循环调用
add(),或先构造完整集合再一次性设置(如set("students", list)); - 确保项目中已引入 JayWay JsonPath 依赖(如 Maven):
<dependency><groupid>com.jayway.jsonpath</groupid><artifactid>json-path</artifactid><version>2.9.0</version></dependency>
总结:核心在于区分「JSON 上下文」与「JSON 数据本体」——.json() 是桥接二者的关键方法。掌握这一模式后,即可安全、准确地完成对象插入、数组追加、字段更新等常见 JSON 操作。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










