如何创建JSON数组?

时间:2010-03-30 09:33:05

标签: jquery json arrays

您好我想创建一个JSON数组。

我尝试过使用:

JSONArray jArray = new JSONArray();
  while(itr.hasNext()){
    int objId = itr.next();
jArray.put(objId, odao.getObjectName(objId));
  }
results = jArray.toString();

注意:odao.getObjectName(objId)根据“对象ID”检索名称,该对象称为objId。

然而,我得到一个非常有趣的数组,如

[null,null,null,"SomeValue",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"AnotherValue",null,null,null,null,null,null,null,null,null,null,"SomethingElse","AnotherOne","LastOne"]

使用jQuery检索时只显示“LastOne”。

数组看起来像

  

{[ “3”: “someValue中”],[ “40”: “AnotherValue”],[ “23”: “SomethingElse”],[ “9”: “AnotherOne”],[ “1”:” LastOne“]}

由于某些原因,我得到的数字根本没有出现。

3 个答案:

答案 0 :(得分:12)

快速解决方案:

JSONArray jArray = new JSONArray();
while (itr.hasNext()) {
   JSONObject json = new JSONObject();
   int objId = itr.next();
   json.put(Integer.toString(objId), odao.getObjectName(objId));
   jArray.put(json);
}

results = jArray.toString();

基于T. J. Crowder's response,我的解决方案是这样做的:

[{"3":"SomeValue"},
 {"40":"AnotherValue"},
 {"23":"SomethingElse"},
 {"9":"AnotherOne"},
 {"1":"LastOne"}
]

请参阅Jim Blackler关于你做错的评论。

答案 1 :(得分:8)

线索在JSONArray的文档中,用于方法put(int index,String value)

  

如果索引大于JSONArray的长度,则null元素将是   根据需要添加,以填补它。

答案 2 :(得分:2)

你引用的“对象看起来像”是无效的JSON。它是一个对象(由{}分隔)但是它内部的值没有任何键。有关JSON的语法,请参阅json.org

如果你想要这个:

{"3":"SomeValue",
 "40":"AnotherValue",
 "23":"SomethingElse",
 "9":"AnotherOne",
 "1":"LastOne"
}

...改为使用JSONObject,并在输入条目时将objId转换为密钥,例如:

JSONObject obj = new JSONObject();
while(itr.hasNext()){
    int objId = itr.next();
    obj.put(String.valueOf(objId), odao.getObjectName(objId));
}
results = obj.toString();

如果你想要这个:

[{"3":"SomeValue"},
 {"40":"AnotherValue"},
 {"23":"SomethingElse"},
 {"9":"AnotherOne"},
 {"1":"LastOne"}
]

...请参阅The Elite Gentleman's answer(这是JSONObjects的JSONArray)。