2016-04-26 6 views
3

значения JSON, которые я получаю от сервера:JSONObject синтаксического словаря объектов

{ 
"Status":0, 
"Message":"", 
"Result":{"0B":"S.C. Blue Air","0Y":"FlyYeti","1X":"Branson Air"} 
} 

Получение результата как «ответ» после подключения, и я могу показать свои JSON строки результатов на экране.

JSONObject json = new JSONObject(response); 
String status = json.getString("Status"); 
String message = json.getString("Message"); 
String result = json.getString("Result"); 
responseView.setText("Status" + status+ "Message" + message" + Result" + result); 

Я в порядке результаты «Статус» и «Message», но не с «Result», потому что хочу, чтобы отделить «результат» объекты, как и умелое использование каждого из них в качестве объектов.

Например: Когда я типа OB в мое приложение, я получаю результат SC Blue Air

+0

Ваш «результат» - это объект json, и вы разбираете его как строку ... исправьте его. – Mohit

+0

Вы можете использовать PONTY Print JSON Output (Jackson). – dnsserver

+0

вам нужно захватить объект результата, а затем захватить строки из этого – mewc

ответ

2

Вместо:

String result = json.getString("Result"); 

использование

if(json.get("Result") instanceof JSONObject){ 
    JSONObject object = (JSONObject) json.get("Result"); 
    //do what you want with JSONObject 
    String ob = object.get("0B"); 

} 

Если вы хотите сохранить его каким-либо способом, вы можете поместить его в Map или создать объект, если всегда это один и тот же данные

+0

мой результат - это объект. Но как я могу получить доступ к объектам OB и S.C. Blue Air отдельно.Должен ли я помещать объект в хэш-карту? – bkm

+0

показано в моем ответе –

1

попробовать это:

JSONObject json = new JSONObject(response); 
JSONObject resultObj = json.getJSONObject("Result"); 
String OB = resultObj.getString("OB"); 
+0

Это работает, но я хочу позвонить OB в мое приложение, как пользователь, а не код. Поэтому я думаю, что мне нужно поместить объекты в карту или что-то подобное, чтобы иметь возможность звонить, искать или что-то еще. Согласен ли ты со мной? – bkm

1

Попробуйте

String base = ""; //Your json string; 
JSONObject json = new JSONObject(base); 
JSONOBject resultJson = json.getJSONObject("Result"); 

// Get all json keys "OB", "OY", "1X" etc in Result, so that we can get values against each key. 
Set<Map.Entry<String, JsonElement>> entrySet = resultJson.entrySet(); 

Iterator iterator = entrySet.iterator(); 

for (int j = 0; j < entrySet.size(); j++) { 
    String key = null; //key = "OB", "OY", "1X" etc 
    try { 
     Map.Entry entry = (Map.Entry) iterator.next(); 
     key = entry.getKey().toString(); 
     //key = "OB", "OY", "1X" etc 
    } 
    catch (NoSuchElementException e) { 
     e.printStackTrace(); 
    } 
    if (!TextUtils.isEmpty (key)) { 

     Log.d ("JSON_KEY", key); 
     String value = resultJson.getString(key); 
     //for key = "0B", value = "S.C. Blue Air" 
     //for key = "0Y", value = "FlyYeti" 
     //for key = "1X", value = "Branson Air" 
    } 
} 

Он работает с любым массивом с динамическим ключом JSon.

Не забывайте accept the answer & upvote, если он работает.

+0

Set > entrySet = resultJson.entrySet(); У меня есть красная ошибка в entrySet() и до сих пор не удалось выяснить: / – bkm

1

Вы можете использовать некоторые библиотеки, такие как Gson (Google) или Moshi (Square) Этих библиотек позволяют вам объявить модель как обычный класс Java (обычно называемого Pojos) аннотированные каким-то образом, что это библиотека связать свои свойства в формате JSON свои свойства явы ,

В вашем случае:

JSON:

{ 
"Status":0, 
"Message":"", 
"Result":{"0B":"S.C. Blue Air","0Y":"FlyYeti","1X":"Branson Air"} 
} 

МОДЕЛЬ:

public class MyCallResponse { 
    @SerializedName("Status") 
    int status; 
    @SerializedName("Message") 
    String message; 
    @SerializedName("Result") 
    Result result; 
} 

public class Result { 
    @SerializedName("0B") 
    String b; 
    @SerializedName("0Y") 
    String y; 
    @SerializedName("0X") 
    String x; 
} 

В этом случае с Gson вы можете сделать:

MyCallResponse response = new Gson().fromJson(json, MyCallResponse.class); 
Log.i("Response b", response.result.b); 

Посмотрите на документация для получения дополнительной информации о обеих библиотеках.