为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2021-10-27 19:15:34
我有一个要求,我需要更新 JSON 中的值。我需要更新的密钥的路径也基于某些条件,所以我必须在属性文件中维护路径。这是我的 JSONString 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)有人请指导我。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

我知道为时已晚,但也许这可以帮助其他人。OP 收到该错误,因为 valuejsonPathExpressionForDistrict是属性的路径,而不是 JSON 对象或地图。

要添加district2postal_code,路径应该是"$['delivery_codes'][0]['postal_code']"

要使用 JSonPath 更新/添加 JSON 中的任何值,我们可以使用帖子中提到的方式,但需要检查并确保源 JSON 对象中的路径有效。


查看完整回答
反对 回复 2021-10-27
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

使用 org.json 库。

JSON格式

您可以使用 JSONArray 并获取数组中项目的键。

你可以得到一个这样的项目:

array.getJSONObject(i).getInt("postal_code");

在这种情况下, i 是 JSONArray 中的项目。

祝你好运。


查看完整回答
反对 回复 2021-10-27
  • 3 回答
  • 0 关注
  • 348 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信