我必须填充这样的json对象,假设它名为detailJSON:
{"amount": "5.00", "ac_no": "123456" }
我是这样做的:
detailJSON.put("amount","5.00");
detailJSON.put("ac_no","123456");
在此之后,在一些共享首选项中输入详细信息,现在我想清除这个JSONObject并使用相同的detailJSON对象来存储另一个json(使用不同的键),这样:< / p>
{"amount":"6.00", "loan_no":"123456"}
我知道有一个方法remove(),它删除了特定的键和相应的值。
此作品:
detailJSON.remove("amount");
detailJSON.remove("ac_no");
然后使用它 -
detailJSON.put("amount","6.0");
detailJSON.put("loan_no","123456");
现在这是一个非常简单的例子。在我正在处理的代码中,我有很多键,所以使用remove实际上增加了LOC。此外,每次删除之前我都需要检查JSONObject has
是否是特定键。
还有其他方法,我可以实现JSONObject的清除吗?
我试过
detailJSON=null ;
detailJSON=new JSONObject();
但它不起作用。
我基本上在寻找类似clear()方法的东西,如果存在的话。
答案 0 :(得分:4)
这个版本有一个开销,因为每次获取密钥集,但它没有并发修改异常。
while(json.length()>0)
json.remove(json.keys().next());
答案 1 :(得分:2)
Iterator keys = detailJSON.keys();
while(keys.hasNext())
detailJSON.remove((String)detailJSON.keys().next());
答案 2 :(得分:1)
如果detailJSON
是地图变量,您可以使用detailJSON.clear()
方法清空地图中的值。
答案 3 :(得分:1)
你可以,但这将是一个黑客。
Iterator i = detailJSON.keys();
while(i.hasNext()) {
i.next().remove();
}
//or
detailJSON.keySet().clear();
它有效,因为JSONObject.keySet()
会返回this.map.keySet()
。 HashMap.keySet()
的JavaDoc说的是什么:
返回此地图中包含的键的Set视图。该集由地图支持,因此对地图的更改将反映在集中,反之亦然。
来自集合的Java HashMap
将返回java.util.HashMap.KeySet
和java.util.HashMap.KeySet.clear();
只调用map.clear()
(KeySet是java.util.HashMap的内部类)< / p>
答案 4 :(得分:1)
你可以使用这种方法
public HashMap clearMap(HashMap detailJSON){
for(String key: detailJSON.keySet())
detailJSON.remove(key);
return detailJSON;
}
答案 5 :(得分:0)
JSONObject
似乎没有明确的方法:。如果您必须迭代所有JSONObject
以清除它,最好获得父节点,并使用new JSONObject()
进行更新。
您可能使用while
来获取这些详细信息,因此您可以执行此操作:
Iterator keys = mJson.keys();
while(keys.hasNext())
{
String key = keys.next();
JSONObject detailJSON = mJson.getJSONObject(key);
JSONObject newDetail = new JSONObject();
...
mJson.put(key,newDetail);
}
使用JSONArray
时:
for (int i=0; i < mJson.length(); i++)
{
JSONObject detailJSON = mJson.getJSONObject(i);
JSONObject newDetail = new JSONObject();
...
mJson.put(i,newDetail);
}
答案 6 :(得分:0)
将 JSON 设为字符串并打印出来。 喜欢:
JSONObject jo =new JSONObject();
System.out.println(jo.toString()); ```