Перейти к основному содержимому

Преобразование строки в JsonObject с помощью Gson

· 2 мин. чтения

1. Обзор

При работе с JSON в Java с использованием библиотеки Gson у нас есть несколько вариантов преобразования необработанного JSON в другие классы или структуры данных, с которыми нам будет легче работать.

Например, мы можем преобразовать строки JSON в Map<String, Object> или создать собственный класс с сопоставлениями . Однако иногда удобно иметь возможность преобразовать наш JSON в универсальный объект.

В этом уроке мы узнаем, как Gson может предоставить нам JsonObject из строки.

2. Зависимость от Maven

Во-первых, нам нужно включить зависимость gson в наш pom.xml :

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>

Мы можем найти последнюю версию gson на Maven Central .

3. Использование JsonParser

Первый подход, который мы рассмотрим для преобразования строки JSON в JsonObject , представляет собой двухэтапный процесс, в котором используется класс JsonParser .

Для первого шага нам нужно разобрать нашу исходную строку .

Gson предоставляет нам парсер под названием JsonParser, который анализирует указанную строку JSON в дерево разбора JsonElements :

public JsonElement parse(String json) throws JsonSyntaxException

Как только наша строка будет проанализирована в дереве JsonElement , мы воспользуемся методом getAsJsonObject() , который вернет желаемый результат.

Давайте посмотрим, как мы получим наш окончательный JsonObject :

String json = "{ \"name\": \"ForEach\", \"java\": true }";
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();

Assert.assertTrue(jsonObject.isJsonObject());
Assert.assertTrue(jsonObject.get("name").getAsString().equals("ForEach"));
Assert.assertTrue(jsonObject.get("java").getAsBoolean() == true);

4. Использование fromJson

Во втором подходе мы увидим, как создать экземпляр Gson и использовать метод fromJson . Этот метод десериализует указанную строку JSON в объект указанного класса:

public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException

Давайте посмотрим, как мы можем использовать этот метод для анализа нашей строки JSON , передав класс JsonObject в качестве второго параметра:

String json = "{ \"name\": \"ForEach\", \"java\": true }";
JsonObject convertedObject = new Gson().fromJson(json, JsonObject.class);

Assert.assertTrue(convertedObject.isJsonObject());
Assert.assertTrue(convertedObject.get("name").getAsString().equals("ForEach"));
Assert.assertTrue(convertedObject.get("java").getAsBoolean() == true);

5. Вывод

В этой краткой статье мы узнали о двух разных способах использования библиотеки Gson для получения JsonObject из строки в формате JSON в Java. Мы должны использовать тот, который лучше подходит для наших промежуточных операций JSON.

Как обычно, исходный код этих примеров доступен на GitHub .