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

杰森:

{
   "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 作为字符串返回,因此无法访问那里的内容

4

6 回答 6

1

在当前的 jsonString数据中JSONArray,其中包含JSONObject's,因此您可以从以下位置获取所有JSONObject's 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"));
    }

     }
于 2013-05-22T06:10:56.397 回答
0

使用 Google 的 GSON,解析 JSON 的更简单更好的方法。这是它的教程。我一直在我的所有项目中使用它,它就像一个魅力。 GSON 教程

于 2013-05-22T06:51:12.587 回答
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"));



}
于 2013-05-22T06:51:49.803 回答
0

还可以考虑使用 JsonReader 来解析您的数据。如果您的数据变大,它将使用更少的内存,因为它不必将整个数组加载到一个 java 对象中。

此处给出了如何使用它的示例。

于 2013-05-22T06:14:37.223 回答
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));
于 2013-05-22T07:20:49.330 回答
-1

使用这个 for 循环

for(i=0;i<array.lenght();i++)
{
   // evey iteration you will get an json object.
}
于 2013-05-22T06:29:50.617 回答