Java解析JSON异常

时间:2017-03-15 11:45:20

标签: 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));
    }

信息:Connection.getDataWOProxy(proxyUseQ);是我编写的一种方法,它使用代理从URL获取JSON字符串。 proxyUseQ是一个布尔值,告诉方法是否使用代理。

我的代码应该做什么通常

JSONObject obj = new JSONObject(Connection.getDataWOProxy(proxyUseQ));

^此行初始化我的JSONObject,为其提供String。效果很好。

JSONArray arr = obj.getJSONArray("result");

^我希望它能够访问"result"树 - 如果我做对了也可以。 现在,如果我理解正确,我的所有信息都应保存在该数组中,这是正确的吗?

    for (int i = 0; i < arr.length(); i++) {
        System.out.println(arr.getInt(i));
    }

^现在,我想访问几个信息并打印例如来自short_description的{​​{1}}(控制台输出应为:result 2)。这是我的代码失败的地方:

TEST 2

我的JSON字符串:

org.json.JSONException: JSONArray[0] is not a number.

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

{
      "number": "1234",
      "short_description": "TEST",
      "priority": "4 - Low",
      "caller_id": "Some, User"
    },

获取您必须的号码

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

arr.getInt(i)错了,它的第一个条目是&#34;结果&#34; JSONObject类型的键,因此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"));
}

输出中:

TEST
TEST 2

打印每个键&amp;值。

    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");
        }
    }

输出

---------------->Entry :1
number ==> 1234
short_description ==> TEST
caller_id ==> Some, User
priority ==> 4 - Low
---------------->Entry :2
number ==> 12345
short_description ==> TEST 2
caller_id ==> Some, User2
priority ==> 4 - Low

答案 4 :(得分:0)

 //import java.util.ArrayList;
 //import org.bson.Document;


 Document root = Document.parse("{ \"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\" }] }");

 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(0)).get("number")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(0)).get("short_description")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(0)).get("priority")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(0)).get("caller_id")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(1)).get("number")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(1)).get("short_description")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(1)).get("priority")));
 System.out.println(((String)((Document)((ArrayList)root.get("result")).get(1)).get("caller_id")));