У меня есть требование, где мне нужно обновить значение в 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) на com.jayway.jsonpath.internal.JsonContext.put (JsonContext.java:221) на com.jayway.jsonpath.internal.JsonContext.put (JsonContext.java:199) по адресу com..service.ServiceImpl.main (ServiceImpl.java:179)
Кто-то, пожалуйста, сообщите мне об этом.