在 JsonPath 中,我看到“$”符号被描述为“引用根对象或元素”的符号。
例子:
JsonPath.read(json, "$.store.book[*].author");
Run Code Online (Sandbox Code Playgroud)
问题:有什么理由不以“$”开头的路径吗?
在 Jayway 中,您可以省略“$”。在路径的起点处并得到相同的结果。
但是,有理由这样做吗?
我设法使用 jsonPath 和此代码更新 json 对象
JSONObject json = new JSONObject("{\"data\":[{\"city\":\"New York\",\"name\":\"John\",\"age\":31},{\"city\":\"Paris\",\"name\":\"Jack\",\"age\":12}]}");
DocumentContext doc = JsonPath.parse(json.toString())
.set("$..name","newName");
System.out.println("doc.jsonString() = " + doc.jsonString());
Run Code Online (Sandbox Code Playgroud)
输出:
doc.jsonString() = {"data":[{"city":"New York","name":"newName","age":31},{"city":"Paris","name":"newName","age":12}]}
Run Code Online (Sandbox Code Playgroud)
现在我想根据旧值更新值(通过对旧值应用函数
)
DocumentContext doc = JsonPath.parse(json.toString())
.set("$..name",upper(oldValue))
.set("$..age", oldValue+10);
Run Code Online (Sandbox Code Playgroud)
这将导致以下 json
doc.jsonString() = doc.jsonString() = {"data":[{"city":"New York","name":"JOHN","age":41},{"city":"Paris","name":"JACK","age":22}]}
Run Code Online (Sandbox Code Playgroud)
有人知道我如何能够像这样引用旧值吗?
问候,
目前我需要根据配置处理一些 json 结果,而不是硬代码。
例如,json如下
{
data: [{
orderNo: "CG8310150",
details: [{
skuId: 4384,
amount: 2
}, {
skuId: 4632,
amount: 5
}]
}, {
orderNo: "CG8310151",
details: [{
skuId: 4384,
amount: 3
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
我想要的结果如下
[{
orderNo: "CG8310150",
skuId: 4384,
amount: 2
}, {
orderNo: "CG8310150",
skuId: 4632,
amount: 5
}, {
orderNo: "CG8310151",
skuId: 4384,
amount: 3
}]
Run Code Online (Sandbox Code Playgroud)
如果有人有 Jayway JsonPath 的解决方案,或者有任何其他工具的建议,请告诉我。
感谢您的帮助!