0

我试图形成这种类型的jsonarray.

[
 { 
  "userIdentity":"bbb",
  "admin":true/false
 },
 { 
  "userIdentity":"bbb",
  "admin":true/false
 }
.
.
.

        ]

我在 android 中使用了这段代码,从hashmaptoAdd 提供输入:

        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());             
        }

toAdd 的哈希图有:

towhid37:value=true
towhid32:value=true

inerobj值是好的。但是当附加inerobj到 jsonarray 时,它添加了第一个value(towhid37)好的。bt 当它放置第二个时,它value(towhid32)也替换了第一个值,即数组的第一个元素现在变为(towhid32)。

继承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"}]

这里有什么问题?

4

1 回答 1

2

添加

inerobj=new JSONObject();

在 for 循环内。

据我了解,它存储对 JSONObject 的引用而不是其值,这就是为什么这些值似乎被覆盖了。只需重新初始化变量以添加新值。

于 2013-05-21T04:24:16.820 回答