1. Обзор
JSON — это облегченный и независимый от языка формат обмена данными, используемый в большинстве случаев взаимодействия клиент-сервер.
JSONObject
и JSONArray
— это два общих класса, которые обычно доступны в большинстве библиотек обработки JSON. JSONObject хранит неупорядоченные пары
ключ-значение , как и реализация Java Map
. JSONArray , с
другой стороны, представляет собой упорядоченную последовательность значений , очень похожую на List
или Vector
в Java.
В этом руководстве мы будем использовать библиотеку JSON-Java
( org.json
) и узнаем, как обрабатывать JSONArray
для извлечения значения для заданного ключа. При необходимости у нас есть введение в эту библиотеку.
2. Зависимость от Maven
Сначала мы начнем с добавления приведенной ниже зависимости в наш POM:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
Мы всегда можем узнать последнюю версию JSON-Java
на Maven Central .
3. Создание контекста
Сообщение JSON обычно состоит из объектов и массивов JSON, которые могут быть вложены друг в друга. Объект JSONArray
заключен в квадратные скобки [ ]
, тогда как JSONObject
заключен в фигурные скобки {}
. Например, давайте рассмотрим это сообщение JSON:
[
{
"name": "John",
"city": "chicago",
"age": "22"
},
{
"name": "Gary",
"city": "florida",
"age": "35"
},
{
"name": "Selena",
"city": "vegas",
"age": "18"
}
]
Понятно, что это массив объектов JSON. Каждый объект JSON в этом массиве представляет нашу запись о клиенте, имеющую имя, возраст
и город
в качестве атрибутов или ключей.
4. Обработка массива JSON
Учитывая приведенный выше JSON, что, если мы хотим узнать имена всех наших клиентов? Другими словами, имея ключ «имя»
в нашем примере, как мы можем найти все значения, сопоставленные с этим ключом, в заданном массиве JSON?
Как мы знаем, JSONArray
— это список объектов JSON. Итак, давайте найдем все значения для данного ключа:
public List<String> getValuesForGivenKey(String jsonArrayStr, String key) {
JSONArray jsonArray = new JSONArray(jsonArrayStr);
return IntStream.range(0, jsonArray.length())
.mapToObj(index -> ((JSONObject)jsonArray.get(index)).optString(key))
.collect(Collectors.toList());
}
В предыдущем примере:
- Во-первых, мы перебираем весь список объектов в массиве JSON.
- Затем для каждого
JSONObject
мы получаем значение, сопоставленное с данным ключом.
Кроме того, метод optString()
возвращает пустую строку, если такого ключа не существует.
При вызове getValuesForGivenKey(jsonArrayStr, «name»),
где jsonArrayStr
— это наш пример JSON, мы получим список
всех имен в качестве вывода:
[John, Gary, Selena]
5. Вывод
В этой быстрой статье мы узнали, как анализировать JSONArray
, чтобы получить все сопоставленные значения для данного ключа. Здесь мы использовали библиотеку JSON-Java (org.json)
.
JSON.simple — еще одна аналогичная и мощная альтернатива для работы с JSON в Java. Пожалуйста, не стесняйтесь исследовать.
Как обычно, полный исходный код доступен на Github.