Apa yang ada di objek/Array JSON yang tidak diketahui?

Saya ingin mendapatkan daftar nama teman dari Facebook API di Android. Dalam proses itu, saya ingin belajar cara membaca objek/Array JSON.

Saya memiliki JSONObject dan/atau JSONArrays yang telah diberikan kepada saya. Saya tidak tahu apa yang ada di dalamnya*. Saya tahu cara membaca data setelah saya mengetahui bidang apa yang ada, tetapi sejauh yang saya tahu, saya tidak bisa membaca apa pun, tanpa kunci. Bahkan dengan kuncinya, Bagaimana cara mengetahui isinya?

Pada dasarnya, saya ingin sepotong kode yang terlihat seperti:

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

dan minta ia merespons dengan String yang terlihat seperti ini:

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

Tidak mengetahui apa pun tentang apa yang ada di database sebelumnya?

*bisa jadi "warna:" bisa jadi "tingkat ancaman nuklir:" sejauh yang saya tahu.

Saya mencoba ini, tetapi hanya memberikan kunci: Javascript dapatkan Nama kunci JSON


person Glen Pierce    schedule 28.07.2015    source sumber


Jawaban (4)


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

Ini seharusnya bekerja dengan baik.
Jika Anda ingin JSONArray dicetak cantik, Anda dapat menambahkan ini setelah kode yang baru saja saya berikan kepada Anda.

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

JSONObject#keys akan memberi tahu Anda kunci apa yang ditentukan untuk objek . JSONArray#length akan memberi tahu Anda berapa banyak entri dalam array (dan oleh karena itu rentang nilai yang dapat Anda gunakan untuk index dengan metode lain: 0 hingga length() - 1). JSONObject#toString/JSONArray#toString akan memberi Anda string yang Anda minta.

person T.J. Crowder    schedule 28.07.2015

Lihatlah fitur model pohon bawaan Jackson. http://wiki.fasterxml.com/JacksonTreeModel

Dan kode Anda akan menjadi:

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());
       }
}
person Archit Garg    schedule 28.07.2015

selain jawaban teknis (JSONObject#toString(n) tampaknya yang paling mudah - lihat http://developer.android.com/reference/org/json/JSONObject.html),

Saya sering menggunakan dua solusi pragmatis:

  1. cari dokumentasi API... Saya tahu, kedengarannya gila, tetapi beberapa perusahaan memang menawarkan hal seperti itu
  2. retas skrip javascript pendek untuk mencoba API dan periksa hasilnya di konsol pengembang/firebug/apa pun yang berguna
person cypherabe    schedule 28.07.2015
comment
Referensi pengembang agak membuat frustrasi, tetapi menemukan metode .toString() adalah kuncinya. - person Glen Pierce; 28.07.2015