2013-11-29 4 views
1

Я пытаюсь разобрать эту структуру: (Его сводит меня с ума, и я попробовал все, что я могу думать, однако я не очень опытный.)Синтаксический вложенными JSON в ANDROID

{ 
    "topDrops" : { 
     "week" : "14", 
     "player" : [ { 
      "percent" : "3.70", 
      "id" : "10948" 
     }, { 
      "percent" : "3.49", 
      "id" : "0532" 
     }, { 
      "percent" : "2.46", 
      "id" : "11214" 
     }, { 
      "percent" : "2.20", 
      "id" : "0529" 
     }, { 
      "percent" : "2.04", 
      "id" : "0508" 
     } ] 
    }, 
    "version" : "1.0", 
    "encoding" : "ISO-8859-1" 
} 

«topDrop», как имя файла? Игрок - это JSONArray, состоящий из 5 игроков JSONObjects. Но что такое верхняя часть, как в терминах JSON. Я checkes из действует на валидатор JSON мне нужно что-то вроде:

topDrop как JSONObject плеера как JSONArray и проходных объектов в массиве.

любые предложения? /johan

+2

У вас есть код о том, что вы достигли до сих пор? – fasteque

+0

Я попробую очистить его. Я изменил его так много раз, что это беспорядок прямо сейчас. – user3049903

+0

a/разобрать json. b/topDrops - это jsonobject, называемый его именем. c/в этом jsonobject, игрок является jsonarray, также называемый его именем. d/в этом массиве имеется несколько jsonobjects. e/Подумайте о jsonobjects как к картам или ассоциативным массивам. – njzk2

ответ

2

Вот мой код для разбора JSON из URL:

public JSONObject getJSONFromUrl(String url) { 
try { 
    // defaultHttpClient 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 
    HttpResponse httpResponse = httpClient.execute(httpPost); 
    HttpEntity httpEntity = httpResponse.getEntity(); 
    json = EntityUtils.toString(httpEntity); 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
JSONObject jObj; 
// try parse the string to a JSON object 
try { 
    jObj = new JSONObject(json); 
} catch (JSONException e) { 
    Log.e("JSON Parser", "Error parsing data " + e.toString()); 
} 
Log.v("debug", "JSON ready to parsing"); 
return jObj; 
} 

public void parsingData(JSONObject json) { 
try { 
    JSONArray data = json.getJSONArray("data"); 
    for (int i = 0; i < data.length(); i++) { 
     // Do your stuff, example : 
     JSONObject c = data.getJSONObject(i); 
     JSONObject topDrops = c.getJSONObject("topDrops"); 
     JSONArray playerArray = topDrops.getJSONArray("player"); 
     // playerArray.getJSONObject(0) == first player 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
    Log.v("debug", "Error during the connection HTTP"); 
    cancel(Boolean.TRUE); 
} 
} 
+0

выглядит довольно много, что я использовал, за исключением того, что я использую AsyncHttpClient для получения данных. и это работает на «простом» JSON с 1 массивом многих объектов. Это «верхний» объект, который является проблемой. Кажется, я не могу получить массив под объектом или 2 объекта под eachother. методы этого не поддерживают. – user3049903

+0

Вы пробовали JSONObject c = data.getJSONObject (i); mySecondArray = c.getJSONArray («игрок»); ? Я отредактировал свой ответ – Pull

+0

Но разве это не символ "{-символ" и указание объекта и "[" указание массива? это должен быть объект-массив-объект правильно? – user3049903

0

Вы можете использовать библиотеку Java под названием JSONSimple, которая сделает это за вас. link

+0

Проверка ti прямо сейчас. – user3049903

0

Я надеюсь, что это поможет вам! :) Это мое решение.

Integer Week; 
String Version, Encoding; 
ArrayList<Double> Percent; 
ArrayList<Integer> ID; 

JSONObject jObject = new JSONObject(...JSON String...); 
JSONObject TopDrops = jObject.getJSONObject("topDrops"); 
Week = TopDrops.getInt("week"); 

JSONArray Player = TopDrops.getJSONArray("player"); 
for (int i = 0; i < 5; i++) { 
    Percent.add(Player.getJSONObject(i).getDouble("percent")); 
    ID.add(Player.getJSONObject(i).getInt("id")); 
} 
Version = TopDrops.getString("version"); 
Encoding = TopDrops.getString("encoding"); 

Ссылка для скачивания полного проекта: JSONParseProject

Вы можете отправить URL с этой JSON?

0

Я всегда использую библиотеку Gson от Google: https://code.google.com/p/google-gson/ и Для создания POJO я использую интернет-утилиты, как этот http://www.jsonschema2pojo.org/ или это один http://jsongen.byingtondesign.com/. После этого нужно написать одну строку для генерации или анализа любого json. У меня никогда разобрал json вручную.

+0

Я проверю это – user3049903

0

У вас в основном есть объект, который содержит объект, который называется topDrops внутри него, у вас есть строка week и массив под названием player. Каждый объект в этом массиве содержит строку percent и строку id. После этого у вас есть еще две строки: version и encoding.

Я не буду писать вам весь метод синтаксического анализа, но я рекомендую вам ознакомиться с этим сообщением в блоге, которое я написал на эту тему, из которого вы можете понять, как разбирать этот объект с помощью того, что андроид дает вам и используя Gson библиотеки, есть проект, с которым вы можете скачать и поэкспериментировать.

JSON Parsing

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