猿问

为什么我不能使用 Jayway JsonPath 设置 json 属性的值?

我有一个要求,我需要更新 JSON 中的值。我需要更新的密钥的路径也基于某些条件,所以我必须在属性文件中维护路径。这是我的 JSON


String jsonString = "{\"delivery_codes\": [{\"postal_code\": {\"district\": \"District1\", \"pin\": 201001, \"pre_paid\": \"Y\", \"cash\": \"Y\", \"pickup\": \"Y\", \"repl\": \"N\", \"cod\": \"Y\", \"is_oda\": \"N\", \"sort_code\": \"GB\", \"state_code\": \"UP\"}}]}";

现在我的要求是假设我需要将 pre_paid 的值更新为 N 但需要动态的 pre_paid 的路径,因为有时我可能需要更新 state_code 或 sort_code 或 pre_paid 等。所以我使用了 JSONPath:


String jsonPathExpressionForDistrict = "$['delivery_codes'][0]['postal_code']['district']";

String jsonPathExpressionForState_code = "$['delivery_codes'][0]['postal_code']['state_code']";

这些路径我需要存储在一些属性文件/数据库中。


我可以通过以下代码读取该属性:


JsonPath.parse(jsonString).read(jsonPathExpressionForDistrict , JsonNode.class) -> This gives me value 'District1'

但是当我尝试使用以下代码更新值时:


JsonPath.parse(jsonString).put(jsonPathExpressionForDistrict , "District2", String.class);

这给了我以下错误:


线程“main”com.jayway.jsonpath.InvalidModificationException 中的异常:只能在 com.jayway.jsonpath.internal.PathRef$ObjectPropertyPathRef.put(PathRef.java:265) 的地图中添加属性到 com.jayway.jsonpath.JsonPath .put(JsonPath.java:304) at com.jayway.jsonpath.internal.JsonContext.put(JsonContext.java:221) at com.jayway.jsonpath.internal.JsonContext.put(JsonContext.java:199) at com。 .service.ServiceImpl.main(ServiceImpl.java:179)


有人请指导我。


神不在的星期二
浏览 352回答 3
3回答

森栏

我知道为时已晚,但也许这可以帮助其他人。OP 收到该错误,因为 valuejsonPathExpressionForDistrict是属性的路径,而不是 JSON 对象或地图。要添加district2到postal_code,路径应该是"$['delivery_codes'][0]['postal_code']"。要使用 JSonPath 更新/添加 JSON 中的任何值,我们可以使用帖子中提到的方式,但需要检查并确保源 JSON 对象中的路径有效。

猛跑小猪

使用 org.json 库。JSON格式您可以使用 JSONArray 并获取数组中项目的键。你可以得到一个这样的项目:array.getJSONObject(i).getInt("postal_code");在这种情况下, i 是 JSONArray 中的项目。祝你好运。
随时随地看视频慕课网APP

相关分类

Python
我要回答