Включение: я пытаюсь найти api, который может просто изменить значение, беря первый параметр как jsonString, второй параметр как JSONPath, а третий - новое значение этого параметра. Но все, что я нашел, это... https://code.google.com/p/json-path/
Этот api позволяет мне найти любое значение в JSON String. Но я не нахожу простой способ обновить значение любого ключа. Например, вот книга book.json.
{
"store":{
"book":[
{
"category":"reference",
"author":"Nigel Rees",
"title":"Sayings of the Century",
"price":8.95
},
{
"category":"fiction",
"author":"Evelyn Waugh",
"title":"Sword of Honour",
"price":12.99,
"isbn":"0-553-21311-3"
}
],
"bicycle":{
"color":"red",
"price":19.95
}
}
}
Я могу получить доступ к цвету велосипеда, сделав это.
String bicycleColor = JsonPath.read(json, "$.store.bicycle.color");
Но я ищу метод в JsonPath или другой api, что-то вроде этого
JsonPath.changeNodeValue(json, "$.store.bicycle.color", "green");
String bicycleColor = JsonPath.read(json, "$.store.bicycle.color");
System.out.println(bicycleColor); // This should print "green" now.
Я исключаю эти опции,
- Создайте новую строку JSON.
- Создайте объект JSON, чтобы иметь дело с изменяющимся значением и преобразовать его обратно в jsonstring
Причина. У меня около 500 различных запросов на различные виды сервисов, которые возвращают разную структуру json. Поэтому я не хочу вручную создавать новую строку JSON. Поскольку идентификаторы являются динамическими в структуре json.
Любая идея или направление очень ценится.
Обновление этого вопроса с помощью следующего ответа.
- Скопировать MutableJson.java.
-
Скопируйте этот маленький фрагмент и измените, как вам нужно.
private static void updateJsonValue() { JSONParser parser = new JSONParser(); JSONObject jsonObject = new JSONObject(); FileReader reader = null; try { File jsonFile = new File("path to book.json"); reader = new FileReader(jsonFile); jsonObject = (JSONObject) parser.parse(reader); } catch (Exception ex) { System.out.println(ex.getLocalizedMessage()); } Map<String, Object> userData = null; try { userData = new ObjectMapper().readValue(jsonObject.toJSONString(), Map.class); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } MutableJson json = new MutableJson(userData); System.out.println("Before:\t" + json.map()); json.update("$.store.book[0].author", "jigish"); json.update("$.store.book[1].category", "action"); System.out.println("After:\t" + json.map().toString()); }
Используйте эти библиотеки.
- import org.json.simple.JSONObject;
- import org.json.simple.parser.JSONParser;
- import org.codehaus.jackson.map.ObjectMapper;