Вопрос-ответ

How to iterate over a JSONObject?

Как выполнить итерацию по JSONObject?

Я использую библиотеку JSON под названием JSONObject (я не возражаю переключаться, если мне нужно).

Я знаю, как выполнить итерацию по JSONArrays, но когда я анализирую данные JSON из Facebook, я не получаю массив, только JSONObject, но мне нужно иметь возможность получить доступ к элементу через его индекс, например, JSONObject[0] чтобы получить первый, и я не могу понять, как это сделать.

{
"http://http://url.com/": {
"id": "http://http://url.com//"
},
"http://url2.co/": {
"id": "http://url2.com//",
"shares": 16
}
,
"http://url3.com/": {
"id": "http://url3.com//",
"shares": 16
}
}
Переведено автоматически
Ответ 1

Возможно, это поможет:

JSONObject jsonObject = new JSONObject(contents.trim());
Iterator<String> keys = jsonObject.keys();

while(keys.hasNext()) {
String key = keys.next();
if (jsonObject.get(key) instanceof JSONObject) {
// do something with jsonObject here
}
}
Ответ 2

в моем случае я обнаружил, что итерация names() работает хорошо

for(int i = 0; i<jobject.names().length(); i++){
Log.v(TAG, "key = " + jobject.names().getString(i) + " value = " + jobject.get(jobject.names().getString(i)));
}
Ответ 3

Я буду избегать iterator, поскольку они могут добавлять / удалять объект во время итерации, также для использования чистого кода в цикле for. это будет просто чистый код с меньшим количеством строк.

Использование Java 8 и Lamda [Обновление 4/2/2019]

import org.json.JSONObject;

public static void printJsonObject(JSONObject jsonObj) {
jsonObj.keySet().forEach(keyStr ->
{
Object keyvalue = jsonObj.get(keyStr);
System.out.println("key: "+ keyStr + " value: " + keyvalue);

//for nested objects iteration if required
//if (keyvalue instanceof JSONObject)
// printJsonObject((JSONObject)keyvalue);
});
}

Используя старый способ [Обновление 4/2/2019]

import org.json.JSONObject;

public static void printJsonObject(JSONObject jsonObj) {
for (String keyStr : jsonObj.keySet()) {
Object keyvalue = jsonObj.get(keyStr);

//Print key and value
System.out.println("key: "+ keyStr + " value: " + keyvalue);

//for nested objects iteration if required
//if (keyvalue instanceof JSONObject)
// printJsonObject((JSONObject)keyvalue);
}
}

Оригинальный ответ

import org.json.simple.JSONObject;
public static void printJsonObject(JSONObject jsonObj) {
for (Object key : jsonObj.keySet()) {
//based on you key types
String keyStr = (String)key;
Object keyvalue = jsonObj.get(keyStr);

//Print key and value
System.out.println("key: "+ keyStr + " value: " + keyvalue);

//for nested objects iteration if required
if (keyvalue instanceof JSONObject)
printJsonObject((JSONObject)keyvalue);
}
}
Ответ 4

Не могу поверить, что в этом ответе нет более простого и безопасного решения, чем использование итератора...

names () Метод JSONObject возвращает JSONArray из JSONObject ключей, поэтому вы можете просто выполнить итерацию по нему в цикле:

JSONObject object = new JSONObject ();
JSONArray keys = object.names ();

for (int i = 0; i < keys.length (); i++) {

String key = keys.getString (i); // Here's your key
String value = object.getString (key); // Here's your value

}
java json