【问题标题】:How do I create a JSON Array?如何创建 JSON 数组?
【发布时间】:2011-02-02 09:36:55
【问题描述】:

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

我尝试过使用:

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

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

但是我得到了一个看起来很有趣的数组

[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":"最后一个"]}

由于某种原因,这些数字根本没有显示在我得到的数组中。

【问题讨论】:

  • 你有一个 JSON 数组的 JSON 对象?
  • 无论你得到什么,它都不应该是那样的。数组是 [foo,bar,baz] 而对象是 { "foo": "value", "bar": "value", "baz": "value" }。您似乎对您的 {} 和 [] 感到困惑。
  • 谢谢大家,我从每个答案中都得到了一些东西。最后,我意识到我的问题并没有完全按照应有的方式表达,但是您的回答解决了我的问题。

标签: jquery json arrays


【解决方案1】:

为了您的快速解决方案:

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 对您做错了什么的评论。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我明白了,索引实际上是数组的索引,而不是我可以分配的某个值。
    • @Ankur:是的,它是数字索引数组意义上的数组,而不是映射(又名字典,又名关联数组)。您可以将 JSONObject (json.org/javadoc/org/json/JSONObject.html) 用于地图; JSON 对象中的键始终是字符串,因此您需要从 objId 中创建一个字符串,但这很容易。
    【解决方案3】:

    您为“对象应该看起来像”所引用的内容是无效的 JSON。它是一个对象(由{} 分隔),但其中包含没有任何键的值。 JSON 的语法见json.org

    如果你想要这个:

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

    ...改用JSONObject,并在输入条目时将objIds 变成键,例如:

    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)。

    【讨论】:

    • 直到我们知道他/她真正想要什么,这里的每个答案都是正确的。
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2015-09-29
    • 2018-04-28
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多