【问题标题】:JSON Array is apparently null, but it shouldn't be [closed]JSON数组显然是空的,但它不应该是[关闭]
【发布时间】:2018-03-26 23:06:07
【问题描述】:

编辑:我解析了错误的文件!我收到错误,因为我将文件视为数组,但它是错误的文件


我需要解析一个只有一个完整数组的 JSON 文件。我想访问“数据”数组中的“文本”。

JSON 文件:

[
  {
    "id": "12243",
    "data": [
      {
        "text": "testing",
        "userDefined": false
      }
    ],
    "countCheck": false,
    "count": 0
  }
]

Java 代码:

JSONObject object = (JSONObject) parser.parse(new InputStreamReader(new FileInputStream(files[i])));
org.json.simple.JSONArray data = (org.json.simple.JSONArray)object.get("data");

这编译并运行但“数据”显然是空的,我不知道为什么。此外,对象不为空。

【问题讨论】:

  • 您确定准确的数据正在进入您的解析器吗?
  • 根据您的 json 文件,您确定 object 不是数组吗?转换为 JSONObject 时应该会出现异常
  • 它运行了吗?不抛出异常?因为 JSON 以 [ 开头,所以根是一个数组,然后转换为 JSONObject 应该会抛出一个类转换异常。
  • 所以完全消除演员阵容。 Object object = parser.parse(...);object.toString()object.getClass().getName() 然后返回什么?
  • @banzba:如果parse() 返回的是JSONObject 而不是JSONArray,那么您需要处理更大的问题,因为您显示的 JSON 显然以数组而不是目的。尝试不同的 JSON 解析器

标签: java arrays json parsing


【解决方案1】:

JSON 的顶层是一个数组,而不是一个对象,因此将parse() 的输出转换为JSONObject 是错误的。将其转换为 JSONArray,然后访问索引 0 处的 JSONObject,然后获取该对象的 "data" 字段:

JSONArray arr = (JSONArray) parser.parse(new InputStreamReader(new FileInputStream(files[i])));
JSONObject object = (JSONObject) arr.get(0);
JSONArray data = (JSONArray) object.get("data");

然后你可以根据需要迭代data数组中的对象:

for (int i = 0; i < data.size(); i++)
{
    JSONObject obj = (JSONObject) data.get(i);
    String text = obj.get("text");
    //...
}

for (JSONObject obj : data)
{
    String text = obj.get("text");
    //...
}

等等……

【讨论】:

  • 我确实这样做了,但我最终得到了错误:“java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray”
  • @banzba -- 那么最终的问题是什么?您是如何解决 ClassCastException 问题的?
猜你喜欢
  • 2014-08-20
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多