2017-01-28 6 views
2

У меня есть JSON array как этогоНе удается получить доступ к некоторому члену JSON массива Android

[ 
    { 
    "ride_id": "48", 
    "user_id": "22", 
    "event_id": "42", 
    "driver_id": "0", 
    "pick_up_location": "11111" 
    }, 
    { 
    "ride_id": "48", 
    "user_id": "21", 
    "event_id": "42", 
    "driver_id": "0", 
    "pick_up_location": "11111" 
    }, 
    { 
    "name": "ofir rosner", 
    "image": "", 
    "address": "Yokne\\'am Illit, Israel" 
    }, 
    { 
    "name": "hhhh", 
    "image": "profilePictureOfUserId22.JPG", 
    "address": "ffffd" 
    } 
] 

им с помощью OKhttp3 получить мои данные, как

Response response = client.newCall(request).execute(); 
JSONArray array = new JSONArray(response.body().string()); 
for (int i=0; i<array.length(); i++){ 
    JSONObject object = array.getJSONObject(i); 
    ........... 

но объект JSONObeject на месте i содержит только

{"ride_id":"50","user_id":"2","event_id":"44","driver_id":"0","pick_up_location":"11111"} 

но я wa нт, чтобы быть в состоянии сделать что-то вроде этого object.setString("name") или добраться до object в месте i для имени, изображений и адрес

ответ

3

Вашего объект все не имеет name пара ключ-значения, так что вы можете использовать optString, It returns an empty string if there is no such key

JSONArray array = new JSONArray(response.body().string()); 
for (int i=0; i<array.length(); i++){ 
    JSONObject object = array.getJSONObject(i); 
    String name = object.optString("name"); 

    // optionally use object.optString("name","No Name Found"); 
    // To display some default string as name 

    if(!name.isEmpty()){ 
     // we got the data , use it 
     Log.i("name is ",name); // display data in logs 
     } 
} 

или вы можете использовать has которые Determine if the JSONObject contains a specific key.

JSONArray array = new JSONArray(response.body().string()); 
for (int i=0; i<array.length(); i++){ 
    JSONObject object = array.getJSONObject(i); 
    String name; 
    if(object.has("name")){ 
      name = object.optString("name"); // got the data , use it 
     } 
} 

{ // this object has no "name" key-value pair and so does some other object 
    "ride_id": "48", 
    "user_id": "22", 
    "event_id": "42", 
    "driver_id": "0", 
    "pick_up_location": "11111" 
    } 
+0

, что вы имеете в виду под «Ваш объект все не имеют название ключ-значение пары», но массив есть «имя» в нем, и я хочу, чтобы получить доступ к этому – styx

+0

@styx проверить Например, у вашего всего объекта нет пары значений «имя», поэтому вы можете использовать строку выбора, которая не будет генерировать исключение, если ключ отсутствует, вместо этого вы получите пустую строку или вы можете подтвердить наличие ключа, используя 'has' –

+0

Я знаю, что у объекта нет« имени », но я хочу получить доступ к тому, у кого есть – styx

Смежные вопросы