JSONSmart解析整个数组并获取每个对象?

时间:2015-04-25 02:01:18

标签: java json

JSON示例。

编辑:由于文件有多大,我把它放在了一个pastebin上 - http://pastebin.com/wdR2paBp

我如何获得一个“对象”数组,然后遍历它并获取名称(即“minecraft / sounds / dig / sand4.ogg”)以及每个文件的哈希值?

我的尝试:

{{1}}
  • 我还尝试将Objects设为JSONObject,然后使其成为JSONArray,然后使用for循环来获取每个对象,但我得到一个NPE或ClassCast异常(对于此之前的尝试)。

1 个答案:

答案 0 :(得分:0)

你有一个JSON对象,而不是JSON数组。从概念上讲,您可以将其视为一组名称/值对,但根据JSON规范,NV对不是有序的;即它是一个集合,而不是列表。

没有标准方法可以将JSONObject转换为JSONArray。投射不起作用,JSONObject没有方法进行转换。当然,使用JSONSmart无法保留源文件/字符串中NV对的明显顺序。 (这是一件好事,IMO,因为订单不应该意味着什么。)

如果要迭代NV对,最好的方法是使用entrySet方法将JSONObject的条目作为Set ...然后迭代集合。 (JSONObject的JSONSmart版本是HashMap的子类。)

现在,如果"对象"中的条目集合应该是订购,然后你错误地设计了你的JSON方案。您应该使用JSON数组(使用[...] JSON语法),并且元素需要重新构建为对象; e.g。

  [ {
      "name": "realms/lang/de_DE.lang",
      "hash": "10a54fc66c8f479bb65c8d39c3b62265ac82e742",
      "size": 8112
    },
    {
      "name": "realms/lang/cy_GB.lang",
      "hash": "14cfb2f24e7d91dbc22a2a0e3b880d9829320243",
      "size": 7347
    },
    etcetera
  ]

使用JSONSmart解析时,您将获得JSONArray