更新 JSONObject 中的元素
Posted
技术标签:
【中文标题】更新 JSONObject 中的元素【英文标题】:Update elements in a JSONObject 【发布时间】:2013-02-16 01:33:39 【问题描述】:假设我给了一个 JSONObject
"person":"name":"Sam", "surname":"ngonma",
"car":"make":"toyota", "model":"yaris"
如何更新 JSONObject 中的一些值?
如下:
String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name");
name = "Sammie";
【问题讨论】:
【参考方案1】:使用put方法:https://developer.android.com/reference/org/json/JSONObject.html
JSONObject person = jsonArray.getJSONObject(0).getJSONObject("person");
person.put("name", "Sammie");
【讨论】:
物有所值,也适用于person.element("name", "Sammie")
【参考方案2】:
删除key再添加修改后的key,value对如下图:
JSONObject js = new JSONObject();
js.put("name", "rai");
js.remove("name");
js.put("name", "abc");
我没有用过你的例子;但在概念上是一样的。
【讨论】:
【参考方案3】:您好,我可以向您推荐通用方法。使用递归。
public static JSONObject function(JSONObject obj, String keyMain,String valueMain, String newValue) throws Exception
// We need to know keys of Jsonobject
JSONObject json = new JSONObject()
Iterator iterator = obj.keys();
String key = null;
while (iterator.hasNext())
key = (String) iterator.next();
// if object is just string we change value in key
if ((obj.optJSONArray(key)==null) && (obj.optJSONObject(key)==null))
if ((key.equals(keyMain)) && (obj.get(key).toString().equals(valueMain)))
// put new value
obj.put(key, newValue);
return obj;
// if it's jsonobject
if (obj.optJSONObject(key) != null)
function(obj.getJSONObject(key), keyMain, valueMain, newValue);
// if it's jsonarray
if (obj.optJSONArray(key) != null)
JSONArray jArray = obj.getJSONArray(key);
for (int i=0;i<jArray.length();i++)
function(jArray.getJSONObject(i), keyMain, valueMain, newValue);
return obj;
它应该工作。如果您有任何问题,请继续。我准备好了。
【讨论】:
@EriPro 请看一下这个问题***.com/questions/35933616/… 什么是valueMain? 如果我没记错的话,应该替换的是旧值。 但是如何更新 json 数组中的特定位置?@eabyshev @Venkatesh 首先设置为参数keyMain,valueMain(key,value - json中的特定位置)和newValue用于替换【参考方案4】:用新值更新任何 JSONObjet 的通用方法。
private static void updateJsonValues(JsonObject jsonObj)
for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet())
JsonElement element = entry.getValue();
if (element.isJsonArray())
parseJsonArray(element.getAsJsonArray());
else if (element.isJsonObject())
updateJsonValues(element.getAsJsonObject());
else if (element.isJsonPrimitive())
jsonObj.addProperty(entry.getKey(), "<provide new value>");
private static void parseJsonArray(JsonArray asJsonArray)
for (int index = 0; index < asJsonArray.size(); index++)
JsonElement element = asJsonArray.get(index);
if (element.isJsonArray())
parseJsonArray(element.getAsJsonArray());
else if (element.isJsonObject())
updateJsonValues(element.getAsJsonObject());
【讨论】:
嗨@Manohar Thummanapelly,这对我来说非常好,除了在一种情况下,我有JSONArray,只包含字符串。 “match_departments”:[“L T C”,“M I C U”]。我如何更新这些值。?当前逻辑会更新这些值。【参考方案5】:public static JSONObject updateJson(JSONObject obj, String keyString, String newValue) throws Exception
JSONObject json = new JSONObject();
// get the keys of json object
Iterator iterator = obj.keys();
String key = null;
while (iterator.hasNext())
key = (String) iterator.next();
// if the key is a string, then update the value
if ((obj.optJSONArray(key) == null) && (obj.optJSONObject(key) == null))
if ((key.equals(keyString)))
// put new value
obj.put(key, newValue);
return obj;
// if it's jsonobject
if (obj.optJSONObject(key) != null)
updateJson(obj.getJSONObject(key), keyString, newValue);
// if it's jsonarray
if (obj.optJSONArray(key) != null)
JSONArray jArray = obj.getJSONArray(key);
for (int i = 0; i < jArray.length(); i++)
updateJson(jArray.getJSONObject(i), keyString, newValue);
return obj;
【讨论】:
以上是关于更新 JSONObject 中的元素的主要内容,如果未能解决你的问题,请参考以下文章