«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. Обработка JSONArray

Учитывая приведенный выше 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.