我试图形成这种jsonarray
。
[
{
"userIdentity":"bbb",
"admin":true/false
},
{
"userIdentity":"bbb",
"admin":true/false
}
.
.
.
]
我在Android中使用此代码,从hashmap
添加来自:添加:
JSONObject inerobj=new JSONObject();
JSONArray jsonarray=new JSONArray();
for (String s : toAdd.keySet()) {
// Log.d("userid",s);
inerobj.put("userIdentity", s);
inerobj.put("admin", Boolean.parseBoolean(toAdd.get(s)));
Log.d("inerobj.toString",inerobj.toString());
jsonarray.put(inerobj);
Log.d("jsonarray.toString",jsonarray.toString());
}
hashmap toAdd具有:
towhid37:value=true
towhid32:value=true
在inerobj
中值是正确的。但是当将inerobj
附加到jsonarray时,它会添加第1 value(towhid37)
个确定。 bt当它放入第二个value(towhid32)
时它也会替换第一个值,即数组的第一个元素现在变为(towhid32)。
Heres Logcat输出:
05-20 12:20:43.968: D/inerobj.toString(3788): {"admin":true,"userIdentity":"towhid37"}
05-20 12:20:43.988: D/jsonarray.toString(3788): [{"admin":true,"userIdentity":"towhid37"}]
05-20 12:20:43.988: D/inerobj.toString(3788): {"admin":true,"userIdentity":"towhid32"}
05-20 12:20:44.038: D/jsonarray.toString(3788): [{"admin":true,"userIdentity":"towhid32"},{"admin":true,"userIdentity":"towhid32"}]
这里有什么问题?
答案 0 :(得分:2)
添加
inerobj=new JSONObject();
在for循环中。
据我所知,它存储了对JSONObject的引用而不是它的值,这就是为什么这些值似乎被覆盖了。只需重新初始化变量即可添加新值。