2015-07-28 3 views
-2

Я хочу получить список имен друзей из Facebook API в Android. В этом процессе я хочу научиться читать объекты JSON/массивы.Что находится в неизвестном объекте/массиве JSON?

У меня есть JSONObject и/или JSONArrays, которые были переданы мне. Я не знаю, что в них. Я знаю, как читать данные, как только я знаю, какие поля существуют, но я не могу ничего прочитать, насколько я могу судить, без ключа. Даже с ключом, Как я могу сказать, что в нем?

В принципе, я хотел бы кусок кода, который выглядит как:

JSONArray mArray = response.getJSONArray(); 
String theEntireDatabase = mArray.getStringOFEntireDatabase(); 

и он ответит на строку, которая выглядит следующим образом:

{ 
    "phoneNumber": [ 
     { 
     "type": "work", 
     "num": "11111" 
     }, 
     { 
     "type": "home", 
     "num": "2222" 
     } 
    ], 
    "address": { 
     "state": "World", 
     "address": "infinite space, 000", 
     "city": "Android city" 
    }, 
    "surname": "Swa", 
    "name": "Android" 
} 

не познав ничего того, что в базе данных заранее?

* Это может быть «цвет»: это может быть «уровень ядерной угрозы:» для всех, кого я знаю.

Я попробовал это, но это дает лишь ключи: Javascript get JSON key Name

ответ

1
JSONArray mArray = response.getJSONArray(); 
String theEntireDatabase = mArray.toString(); 

Это должно работать хорошо.
Если вы хотите, чтобы JSONArray был довольно напечатан, вы можете добавить это после кода, который я вам только что предоставил.

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
JsonParser jp = new JsonParser(); 
JsonElement je = jp.parse(theEntireDatabase); 
String prettyJsonString = gson.toJson(je); 
1

JSONObject#keys покажет вам, какие ключи определены для объекта. JSONArray#length расскажет, сколько записей в массиве (и, следовательно, диапазон значений, которые вы можете использовать для index другими способами: 0 - length() - 1). JSONObject#toString/JSONArray#toString предоставит вам строку, которую вы просили.

1

Посмотрите на встроенную функцию джек-моделей Jacksons. http://wiki.fasterxml.com/JacksonTreeModel

И ваш код будет:

public void parse(String json) { 
     JsonFactory factory = new JsonFactory(); 

     ObjectMapper mapper = new ObjectMapper(factory); 
     JsonNode rootNode = mapper.readTree(json); 

     Iterator<Map.Entry<String,JsonNode>> fieldsIterator = rootNode.fields(); 
     while (fieldsIterator.hasNext()) { 

      Map.Entry<String,JsonNode> field = fieldsIterator.next(); 
      System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue()); 
     } 
} 
0

помимо технических ответов (JSONObject # ToString (п), кажется, самый простой - см http://developer.android.com/reference/org/json/JSONObject.html),

я часто использую два более прагматичные решения:

  1. искать документацию API ... Я знаю, это звучит безумно, но некоторые компании действительно предлагают такую ​​вещь.
  2. взломайте короткий скрипт javascript, чтобы попробовать API и проверить результат в консоли разработчика/firebug/все, что удобно
+0

Ссылка разработчика была немного расстроена, но поиск метода .toString() был «ключом». –