【发布时间】:2017-06-28 20:15:57
【问题描述】:
我们中间有个需求更新JSON数据,需要用java返回更新的JSON数据。它还应该支持任何类型的 JSON 数据。
例如:
假设 {object:{"color":"red","shape":"Triangle"}} 是 JSON 数据,此时我们需要将 shape 的值更新为 Rectangle,我们需要返回更新后的 JSON 数据,如下所示:
{object:{"color":"red","shape":"Rectangle"}}
为此,我们需要将元素路径(我们需要更新哪个元素)和 updateText 和 JSON 数据传递给 JAVA 代码。
这里是方法调用:
updateValue("object/shape", "Rectangle", "{object:{"color":"red","shape":"Triangle"}}")
我们使用 Gson 库尝试了以下代码。但是使用此代码,我们能够更新目标 Json 元素,但要求是返回具有更新值的整个 JSON 数据。
所以请建议我们如何使用更新后的文本重新构建 JSON 数据。
以下是我们尝试更新 Json 数据的代码。
public String updateValue(String keyPath, String updateText, String jsonText) {
String[] keys = keyPath.split("/");
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = (JsonObject) jsonParser.parse(jsonText);
String result = "";
for(String key : keys)
{
if (jsonObject.get(key) instanceof JsonObject)
{
jsonObject = (JsonObject)jsonObject.get(key);
}
else if(jsonObject.get(key) instanceof JsonArray)
{
JsonArray jsonArray = (JsonArray)jsonObject.get(key);
result = jsonArray.toString();
}
else
{
result = jsonObject.get(key).toString();
}
}
result = result.replace(result, updateText);
return result;
}
【问题讨论】: