Я использую библиотеку JSON под названием JSONObject
(я не против переключения, если мне нужно).
Я знаю, как перебирать JSONArrays
, но когда я анализирую данные JSON из Facebook, я не получаю массив, только a 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
}
}
Ответы:
Может быть, это поможет:
источник
JSONObject
неупорядочены, и ваше утверждение было простым отражением частной реализации;)for (String key : keys)
для моего случая я нашел итерацию
names()
работ хорошоисточник
Iterating
в Java, он работает довольно хорошо! Спасибо.Я буду избегать итераторов, поскольку они могут добавлять / удалять объекты во время итерации, а также для чистого использования кода для цикла. это будет просто чисто и меньше строк.
Использование Java 8 и Lamda [Обновление 4/2/2019]
Используя старый способ [Обновление 4/2/2019]
Оригинальный ответ
источник
Не могу поверить, что нет более простого и безопасного решения, чем использование итератора в этих ответах ...
JSONObject
names ()
метод возвращаетJSONArray
изJSONObject
ключей, так что вы можете просто ходить , хотя это в цикле:источник
JSONObject
. Нечто подобноеJSONObject object = new JSONObject ("{\"key1\",\"value1\"}");
. Но не помещайте сырец JSON к нему, добавлять элементы в нем сput ()
методом:object.put ("key1", "value1");
.источник
jsonChildObject = iterator.next();
должно определитьсяjsonChildObject
, вроде быJSONObject jsonChildObject = iterator.next();
, нет?Iterator<JSONObject>
даст предупреждение. Я бы заменил его на общий<?>
и сделал бы вызов по вызовуnext()
. Кроме того, я бы использовалgetString("id")
вместо того,get("id")
чтобы сохранить, делая бросок.org.json.JSONObject теперь имеет метод keySet (), который возвращает a
Set<String>
и может быть легко зациклен с помощью for-each.источник
Сначала поместите это куда-нибудь:
Или, если у вас есть доступ к Java8, просто так:
Затем просто переберите ключи и значения объекта:
источник
Я сделал небольшую рекурсивную функцию, которая проходит через весь объект json и сохраняет путь к ключу и его значение.
источник
С Java 8 и лямбда, чище:
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#forEachRemaining-java.util.function.Consumer-
источник
Мы использовали ниже набор кода для перебора
JSONObject
полейисточник
Однажды у меня был json, у которого были идентификаторы, которые нужно было увеличить на единицу, так как они были проиндексированы по 0, и это нарушало автоинкремент Mysql.
Таким образом, для каждого объекта, который я написал этот код - может быть полезным для кого-то:
использование:
это может быть преобразовано для работы для JSONArray как родительский объект
источник
Большинство ответов здесь относятся к плоским структурам JSON. В случае, если у вас есть JSON, в котором могут быть вложенные JSONArrays или Nested JSONObjects, возникает реальная сложность. Следующий фрагмент кода заботится о таком требовании бизнеса. Он принимает хеш-карту и иерархический JSON с вложенными JSONArrays и JSONObjects и обновляет JSON с данными в хеш-карте
Здесь вы должны заметить, что тип возвращаемого значения void, но sice объекты передаются как ссылка, это изменение ссылается на вызывающую сторону.
источник
Ниже код работал нормально для меня. Пожалуйста, помогите мне, если настройка может быть выполнена. Это получает все ключи даже от вложенных объектов JSON.
источник
Это еще одно рабочее решение проблемы:
источник