Получить значение по ключу в JSONArray

Получить значение по ключу в JSONArray

1. обзор

JSON - это легкий и независимый от языка формат обмена данными, используемый для большинства коммуникаций клиент-сервер.

JSONObject иJSONArray - два общих класса, обычно доступные в большинстве библиотек обработки JSON. A JSONObject stores unordered key-value pairs, очень похоже на реализацию JavaMap. A JSONArray, on the other hand, is an ordered sequence of values очень похож наList илиVector в Java.

В этом руководстве мы будем использовать библиотекуJSON-Java (org.json) и узнаем, как обработатьJSONArray для извлечения значения для данного ключа. При необходимости у нас есть доступныйan introduction для этой библиотеки.

2. Maven Dependency

Сначала мы начнем с добавления следующей зависимости в наш POM:


    org.json
    json
    20180813

Мы всегда можем узнать последнюю версию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 в этом массиве представляет запись нашего клиента, имеющуюa name, age, иcity в качестве атрибутов или ключей.

4. ОбработкаJSONArray

Учитывая вышеизложенное в JSON, что если мы захотим узнать имена всех наших клиентов? Другими словами, с учетом ключа“name” в нашем примере, как мы можем найти все значения, сопоставленные с этим ключом в данном массиве JSON?

Как мы знаем,JSONArray - это список объектов JSON. Итак, давайте найдем все значения для данного ключа:

public List 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, мы получимList всех имен в качестве вывода:

[John, Gary, Selena]

5. Заключение

В этой быстрой статье мы узнали, как анализироватьJSONArray, чтобы получить все сопоставленные значения для данного ключа. Здесь мы использовали библиотекуJSON-Java (org.json).

JSON.simple - еще одна похожая и мощная альтернатива для работы с JSON в Java. Пожалуйста, не стесняйтесь исследовать.

Как обычно, доступен полный исходный кодover on Github.