JSONObject json = new JSONObject(ress);
JSONArray array = json.getJSONArray("data");
JSONObject o = array.getJSONObject(0);
Log.d("names","names"+ o.names());
Iterator<?> it = o.keys();
while (it.hasNext()) {
String name = (String) it.next();
o = o.getJSONObject(name);
bookingId .add(o.getString("booking_id"));
clientId.add( o.getString("client_id"));
venueId.add(o.getString("venue_id"));
Log.v("TEST", String.format("Booking ID: %s -- Client ID: %s -- Venue ID: %s", bookingId, clientId, venueId));
}
Json:
{
"data":[
{
"8272":{
"booking_id":"8221",
"client_id":"108",
"venue_id":null
},
"8281":{
"booking_id":"8229",
"client_id":"71",
"venue_id":null
}
}
]
}
没有为8281 ,,
返回任何值如何转到下一个json对象8281?使用names方法将对象8272和8281作为字符串返回,因此无法访问那些内容
答案 0 :(得分:1)
在当前的json String
数据中JSONArray
包含JSONObject
,因此您可以从JSONObject
获取所有JSONArray
:
// get data JSONArray
JSONArray data_arr = json.toJSONArray("data");
for(int i = 0 ; i < data_arr.length(); i++){
// get JSONObject from JSONArray
JSONObject json_object = array.getJSONObject(i);
//nowe get 8272,.. JSONObject from json_object
Iterator iter = json_object.keys();
while(iter.hasNext()){
String key = (String)iter.next();
JSONObject json_obj = json_object.getJSONObject(key);
//.. get all values from 8272 here..
bookingId .add(json_obj.getString("booking_id"));
clientId.add(json_obj.getString("client_id"));
venueId.add(json_obj.getString("venue_id"));
}
}
答案 1 :(得分:0)
还考虑使用JsonReader来解析数据。如果数据变大,它将使用更少的内存,因为它不必将整个数组加载到一个java对象中。
有关如何使用它的示例here。
答案 2 :(得分:0)
使用谷歌的GSON,更简单,更好的方式来解析JSON。这是教程。我一直在我的所有项目中使用它,它就像一个魅力。 GSON Tutorial
答案 3 :(得分:0)
你必须像这样解析
JSONObject json = new JSONObject(ress);
JSONArray array = json.getJSONArray("data");
int len=array.length();
for(int i=0;i<len;i++)
{
JSONObject temp=array.getJSONObject(i)
bookingId .add(temp.getString("booking_id"));
clientId.add(temp.getString("client_id"));
venueId.add(temp.getString("venue_id"));
}
答案 4 :(得分:0)
在你的while循环中
o = o.getJSONObject(name);
这是问题,在这里用不同的名称创建一个新对象
JSONObject jobj = o.getJSONObject(name);
bookingId .add(jobj.getString("booking_id"));
clientId.add( jobj.getString("client_id"));
venueId.add(jobj.getString("venue_id"));
Log.v("TEST", String.format("Booking ID: %s -- Client ID: %s -- Venue ID: %s", bookingId, clientId, venueId));
答案 5 :(得分:-1)
将此用于循环
for(i=0;i<array.lenght();i++)
{
// evey iteration you will get an json object.
}