我正在尝试使用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的新手。感谢。
答案 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")));