ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Преобразование JSON строки в HashMap в Java: org.json

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования JSON-строки в HashMap можно воспользоваться ObjectMapper из библиотеки Jackson:

Java
Скопировать код
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

String json = "{\"key1\":\"value1\",\"key2\":2}";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> result = mapper.readValue(json, Map.class);

Этот код быстро конвертирует JSON-строку в Map, где ключи – это строки, а значения – объекты.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Работа с вложенными JSON

Если встречаются вложенные JSON-структуры, можно применить следующий подход:

Java
Скопировать код
import org.json.JSONObject;
import java.util.Map;

String nestedJson = "{\"name\":\"John\", \"contact\":{\"email\":\"john.doe@example.com\", \"phone\":\"1234567890\"}}";
JSONObject jsonObject = new JSONObject(nestedJson);
Map<String, Object> result = jsonObject.toMap();

В качестве альтернативы применимы инструменты типа ObjectMapper из Jackson или Gson от Google:

Java
Скопировать код
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;

Gson gson = new Gson();
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> result = gson.fromJson(nestedJson, type);

Использование рекурсии для сохранения типов данных

Применив рекурсию, можно сохранить типы данных в HashMap:

Java
Скопировать код
private static Map<String, Object> parseJSONObject(JSONObject json) {
    Map<String, Object> resultMap = new HashMap<>();
    json.keys().forEachRemaining(key -> {
        Object value = json.get(key);
        resultMap.put(key, value instanceof JSONObject ? parseJSONObject((JSONObject) value) :
                          value instanceof JSONArray  ? parseJSONArray((JSONArray) value) : value);
    });
    return resultMap;
}

private static List<Object> parseJSONArray(JSONArray array) {
    List<Object> resultList = new ArrayList<>();
    for (int i = 0; i < array.length(); i++) {
        Object item = array.get(i);
        resultList.add(item instanceof JSONObject ? parseJSONObject((JSONObject) item) :
                      item instanceof JSONArray  ? parseJSONArray((JSONArray) item) : item);
    }
    return resultList;
}

Обработка ошибок для устойчивости

Добавьте обработку исключений для устойчивости программы:

Java
Скопировать код
try {
    Map<String, Object> result = mapper.readValue(json, Map.class);
} catch (IOException e) {
    e.printStackTrace();
}

Визуализация

JSON-строка воспринимается как комод с ящиками, где каждый ключ открывает значение:

Java
Скопировать код
HashMap<String, Integer> fruitDrawer = new HashMap<>();
fruitDrawer.put("apple", 5);
fruitDrawer.put("banana", 3);
fruitDrawer.put("cherry", 7);

Каждый ключ в HashMap работает как пароль для доступа к содержимому ящика.

Использование JSR 353 для стандартизованной обработки

Для стандартизованных процедур обработки JSON в Java используйте JSR 353:

Java
Скопировать код
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
import java.util.Map;

String json = "{\"key1\":\"value1\",\"key2\":2}";
JsonReader jsonReader = Json.createReader(new StringReader(json));
JsonObject jsonObject = jsonReader.readObject();
Map<String, Object> result = jsonObject;

Работа с массивами как профессионал

Воспользуйтесь ArrayList для работы с JSON-массивами:

Java
Скопировать код
JSONArray jsonArray = new JSONArray("[\"John\", \"Jane\", \"Doe\"]");
List<String> list = new ArrayList<>();
for (int i = 0; i < jsonArray.length(); i++) {
    list.add(jsonArray.getString(i));
}
myHashMap.put("names", list);

Погружение в документацию ради совершенства

Для достижения мастерства в преобразовании JSON в HashMap стоит проработать соответствующую документацию и примеры.

Полезные материалы

  1. GitHub – FasterXML/jackson: Официальная страница проекта Jackson
  2. java – Преобразование JSON-строки в HashMap – Stack Overflow: примеры и обсуждения по работе с Jackson.
  3. javax.json (Java(TM) EE 7 Specification APIs): руководство по JSON Processing (JSON-P).
  4. GitHub – fangyidong/json-simple: Набор инструментов для работы c JSON на Java
  5. Gson User Guide: Руководство по работе с JSON используя библиотеку Gson от Google