所以我有一些能够发送出去的代码:
{"id":1,
"method":"addWaypoint",
"jsonrpc":"2.0",
"params":[
{
"lon":2,
"name":"name",
"lat":1,
"ele":3
}
]
}
服务器将此JSON对象作为名为“clientstring”的字符串接收:
JSONObject obj = new JSONObject(clientstring); //Make string a JSONObject
String method = obj.getString("method"); //Pulls out the corresponding method
现在,我希望能够获得{“lon”的“params”值:2,“name”:“name”,“lat”:1,“ele”:3}就像我得到的一样方法”。 但是这两个都给了我例外:
String params = obj.getString("params");
和
JSONObject params = obj.getJSONObject("params");
我真的不知道如何存储和使用{“lon”:2,“name”:“name”,“lat”:1,“ele”:3}没有例外,这是合法的JSON但它不能存储为JSONObject?我不明白。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
params
不一个JSONObject,但它是JSONArray。
所以你需要做的就是首先获取JSONArray
然后获取该数组的第一个元素作为JSONObject
。
JSONObject obj = new JSONObject(clientstring);
JSONArray params = obj.getJsonArray("params");
JSONObject param1 = params.getJsonObject(0);
答案 1 :(得分:2)
如何尝试
JSONObject obj = new JSONObject(clientstring);
JSONArray paramsArr = obj.getJSONArray("params");
JSONObject param1 = paramsArr.getJSONObject(0);
//now get required values by key
System.out.println(param1.getInt("lon"));
System.out.println(param1.getString("name"));
System.out.println(param1.getInt("lat"));
System.out.println(param1.getInt("ele"));
答案 2 :(得分:1)
这里" params"不是对象而是数组。所以你必须使用:
进行解析JSONArray jsondata = obj.getJSONArray("params");
for (int j = 0; j < jsondata.length(); j++) {
JSONObject obj1 = jsondata.getJSONObject(j);
String longitude = obj1.getString("lon");
String name = obj1.getString("name");
String latitude = obj1.getString("lat");
String element = obj1.getString("ele");
}