Java解析JSON异常

Java解析JSON异常,java,json,parsing,Java,Json,Parsing,我正在尝试使用Java解析JSON字符串 这是我目前的代码: JSONObject obj = new JSONObject(Connection.getDataWOProxy(proxyUseQ)); JSONArray arr = obj.getJSONArray("result"); for (int i = 0; i < arr.length(); i++) { System.out.println(arr.getInt(i)); }

我正在尝试使用Java解析JSON字符串

这是我目前的代码:

    JSONObject obj = new JSONObject(Connection.getDataWOProxy(proxyUseQ));
    JSONArray arr = obj.getJSONArray("result");
    for (int i = 0; i < arr.length(); i++) {
        System.out.println(arr.getInt(i));
    }
^这一行初始化我的JSONObject,给它一个字符串。效果很好

JSONArray arr = obj.getJSONArray("result");
^在这里,我想让它访问
“result”
树-如果我做对了,它也可以工作现在,如果我理解正确,我的所有信息都应该保存在该数组中,对吗?

    for (int i = 0; i < arr.length(); i++) {
        System.out.println(arr.getInt(i));
    }
我的JSON字符串:

{
  "result": [
    {
      "number": "1234",
      "short_description": "TEST",
      "priority": "4 - Low",
      "caller_id": "Some, User"
    },
    {
      "number": "12345",
      "short_description": "TEST 2",
      "priority": "4 - Low",
      "caller_id": "Some, User2"
    }
  ]
}

我做错了什么?我是JSON新手。谢谢。

这是一个JSON对象数组;它们无法转换为
int
。如果要访问当前对象上的特定字段,可以这样做:

System.out.println(arr.getJSONObject(i).getString("short_description"));

它是一个JSON对象数组;它们无法转换为
int
。如果要访问当前对象上的特定字段,可以这样做:

System.out.println(arr.getJSONObject(i).getString("short_description"));

是的,因为它不是字符串或数字,而是它的整体

{
      "number": "1234",
      "short_description": "TEST",
      "priority": "4 - Low",
      "caller_id": "Some, User"
    },
要得到这个号码,你必须

arr.getJSONObject(i).getString("number");

是的,因为它不是字符串或数字,而是它的整体

{
      "number": "1234",
      "short_description": "TEST",
      "priority": "4 - Low",
      "caller_id": "Some, User"
    },
要得到这个号码,你必须

arr.getJSONObject(i).getString("number");

JSONArray[0]不是一个数字,因为它是一个对象。 根据JSON字符串,您有一个名为“result”的数组,该数组包含两个元素。 arr.getInt(i)将JSONArray[0]作为JSONObject返回。 你应该打电话
JSONObject obj=JSONArray.getJSONObject(i)
然后你应该打电话
obj.getInt(i)

请注意,json字段通常是字符串,而不是整数。

JSONArray[0]不是数字,因为它是一个对象。 根据JSON字符串,您有一个名为“result”的数组,该数组包含两个元素。 arr.getInt(i)将JSONArray[0]作为JSONObject返回。 你应该打电话
JSONObject obj=JSONArray.getJSONObject(i)
然后你应该打电话
obj.getInt(i)
请注意,您的json字段通常是字符串,而不是整数。

arr.getInt(i)是错误的,它的第一个条目是JSONObject类型的“result”键,因此JSONObject上的getInt无效

下面是正确的程序, 只得到描述

JSONArray arr = obj.getJSONArray("result");
for (int i = 0; i < arr.length(); i++) {
    JSONObject entry = arr.getJSONObject(i);
    System.out.println(entry.getString("short_description"));
}
打印每个键和值

    JSONArray arr = obj.getJSONArray("result");
    for (int i = 0; i < arr.length(); i++) {
        JSONObject entry = arr.getJSONObject(i);
        Iterator<String> keyIter= entry.keys();
        System.out.println("---------------->Entry :" + (i+1));
        while(keyIter.hasNext()){
            String key = keyIter.next();
            System.out.print(key + " ==> ");
            System.out.print(entry.get(key)+"\n");
        }
    }
arr.getInt(i)错误,它的第一个条目是类型为JSONObject的“result”键,因此JSONObject上的getInt无效

下面是正确的程序, 只得到描述

JSONArray arr = obj.getJSONArray("result");
for (int i = 0; i < arr.length(); i++) {
    JSONObject entry = arr.getJSONObject(i);
    System.out.println(entry.getString("short_description"));
}
打印每个键和值

    JSONArray arr = obj.getJSONArray("result");
    for (int i = 0; i < arr.length(); i++) {
        JSONObject entry = arr.getJSONObject(i);
        Iterator<String> keyIter= entry.keys();
        System.out.println("---------------->Entry :" + (i+1));
        while(keyIter.hasNext()){
            String key = keyIter.next();
            System.out.print(key + " ==> ");
            System.out.print(entry.get(key)+"\n");
        }
    }

您可以添加一个解释,说明您从原始代码中修复的问题吗?这是一个示例,说明如何使用完整的JSON来修复代码片段。它还展示了如果您使用MongoDB,如何使用BSON。您可以添加一个解释,说明您从原始代码中修复的问题吗?这是一个示例,说明了如何使用完整的JSON(仅适用于代码片段)。它还展示了如果您使用MongoDB,如何使用BSON。