查找 Json-path/(任何 API)以更新 Java 中给定 json 字符串中的任何值
Inshort :我试图找到一些api,可以通过将第一个参数作为jsonString来更改值,第二个参数作为JSONPath,第三个参数将是该参数的新值。但是,我发现的只是这个。https://code.google.com/p/json-path/
这个api允许我在JSON字符串中找到任何值。但是,我没有找到更新任何键的值的简单方法。例如,这里是一本书.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 对象来处理不断变化的值,并将其转换回 json 字符串
原因:我对不同类型的服务有大约500个不同的请求,这些请求返回不同的json结构。因此,我不想总是手动创建新的JSON字符串。因为,ID 在 json 结构中是动态的。
任何想法或方向都非常感谢。
使用以下答案更新此问题。
- 复制可变Json.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;