2016-10-17 2 views
0

У меня есть несколько каналов JSON в моем приложении, которые правильно анализируют, используя правильную грамматику и использование ключей. Я использую методику, аналогичную следующей:Итерация/анализ этого ответа JSON

try { 

    JSONObject jsonObj = new JSONObject(response); 
    if(jsonObj.length() > 0){ 
     Iterator keys = jsonObj.keys(); 
     while (keys.hasNext()) { 
      String key = (String) keys.next(); 
      JSONObject obj = (JSONObject) jsonObj.get(key); 

      String myString = obj.get("fieldname").toString(); 

      ... 
     } 
    } 
} catch(e) { 
    ... 
} 

Однако один канал JSON У меня есть стилизовано, как, после чего необходимо разобрать несколько иначе:

{ 
"10":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"20":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"30":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"40":["111","aaa","bbb","213sdg","1.0","-0.343"], 
"50":["111","aaa","bbb","213sdg","1.0","-0.343"] 
} 

Я попытался с помощью JSONArray вместо из JSONObject, но все же предложение try {} обнаруживает ошибку для запроса имени поля/ключа, когда в фиде нет имен полей/ключей.

Есть ли простой способ итерации этого фида стиля, без необходимости менять выход фида? Большое спасибо

EDIT: Изменено JSON ключи объекта, чтобы показать, что я на самом деле, используя различные номера

+0

У вас есть только один JsonObject в вашем json. Почему в вашем цикле while используется второй jsonObject? –

+0

Этот код не распространяется на отправленный JSON. Второй объект должен был получить JSONObject «строки», чтобы затем разобрать и получить значение поля этой строки. – Jammo

+0

В вашей строке нет jsonobject. ваш массив просто содержит строки –

ответ

0

Попробуйте этот код

try{ 
    JSONObject jObject = new JSONObject(yourStringFromYourQuestion); 

    // To get one specific element: 
    JSONObject w1 = jObject.getJSONObject("10"); 
    JSONObject w2 = jObject.getJSONObject("20"); 

    // Iterate over all elements 
    Iterator<?> keys = jObject.keys(); 
    while(keys.hasNext()) { 
    String key = (String)keys.next(); // "10", etc 
    if (jObject.get(key) instanceof JSONObject) { 

    try { 
    // jsonString is a string variable that holds the JSON 
    JSONArray itemArray=jObject.getJSONArray(key); 
    for (int i = 0; i < itemArray.length(); i++) { 
    int value=itemArray.getInt(i); 
    Log.e("json", i+"="+value); 
    } 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
} 
} catch (JSONException e){ 
    Log.e(LOG_TAG, "Failure converting JSON String", e); 
    } 
+0

Спасибо за ответ. Однако ваш 'String score = entry.optString (" score "," ");' полагается на JSON, имеющий поля, сопоставленные с ключами, например '' score ":" 123 "," alive ":" yes "и т. Д. '. У меня нет такого сопоставления с ключами – Jammo

+0

проверить обновленный код –

+0

Спасибо. Да, это имеет смысл. Поскольку это довольно большая загрузка JSON, чтобы минимизировать время загрузки, имена полей были опущены. Так ключи исчезли. Мой исходный код не обрабатывается с помощью объекта JSONArray? – Jammo

0

Ok, было проще, чем я думал. Просто обратитесь к каждой «строки» в качестве JSONArray и анализировать с помощью индексов столбцов:

try { 

    JSONObject jsonObj = new JSONObject(response); 
    if(jsonObj.length() > 0){ 
     Iterator keys = jsonObj.keys(); 
     while (keys.hasNext()) { 
      String key = (String) keys.next(); 
      JSONArray rowArr = jsonObj.getJSONArray(key); 

      String fieldone = rowArr.getString(0); 
      String fieldtwo = rowArr.getString(1);   

      ... 
     } 
    } 
} catch(e) { 
    ... 
} 

Спасибо за ваши входы, парни.

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