В мире Java JSON де-факто становится стандартом для формата обмена данными через XML из-за простоты использования и эффективности с точки зрения его передачи.
Если вы не знаете, что такое JSON, это нотация объектов Javascript, текстовый формат обмена данными, представляющий собой коллекцию «имя-значение», где имя строго строкового типа, а значением может быть int, логическое значение, массив или другой объект json.
GSON — это библиотека Java с открытым исходным кодом, разработанная Google. Это API для преобразования объекта Java в / из представления json.
Почему вы должны использовать это?
- Преобразует любой объект Java, т.е. новый объект или любой существующий / устаревший объект, в JSON и наоборот.
- Лучшая поддержка общих объектов
- Простые, удобные методы для конверсий
- Нет необходимости в каких-либо аннотациях для полей для конверсий
- Все поля по умолчанию включены в преобразования, даже частные поля
- Если вы не хотите включать поле в преобразование, используйте для этого поля временный модификатор
- Он обрабатывает нулевые поля изящно, не включая их в вывод сериализации, но во время десериализации он инициализируется обратно в нуль
Как вы добавляете это в проект?
Добавьте его как зависимость, используя один из следующих способов
Использование Maven
Добавьте следующую зависимость в проект pom.xml
|
1
2
3
4
5
|
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version></dependency> |
Используя Gradle
Добавить следующее в build.gradle проекта
|
1
2
3
4
5
6
7
|
repositories { mavenCentral()} dependencies { compile 'com.google.code.gson:gson:2.2.4'} |
Использовать как неуправляемую зависимость
Если вы не используете какой-либо инструмент для сборки, вы можете добавить gson jar непосредственно в classpath или путь сборки.
Загрузите последнюю банку со страницы загрузок проекта GSON. Загруженный zip-файл содержит 3 jar-файла — двоичный файл, исходный код и javadoc. Возьмите двоичный файл jar и добавьте его в путь к классам вашего проекта.
Как это использовать ?
Для преобразования объекта в / из json вам нужно использовать класс Gson и следующие 2 метода.
toJson () => преобразует предоставленный объект в строку json, принимает объект для преобразования в качестве аргумента и возвращает строку представления json
fromJSon () => преобразует строку json в объект, принимает первый параметр в виде строки json как литерал объекта и класса целевого объекта и возвращает целевой объект
Вы можете использовать экземпляр / объект Gson несколько раз, поскольку он не поддерживает никакого состояния.
Ниже приведено несколько примеров использования GSON API.
Пример 1: Для простого объекта
Рассмотрим следующий объект модели для целей конвертации, но помните, что вы можете конвертировать любой объект
ModelObject.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package in.ajduke.ap012;/*** An model for gson demo * * @author ajduke*/public class ModelObject { String name; int val; boolean status; double f; public ModelObject(String name, int val, boolean status, double f) { super(); this.name = name; this.val = val; this.status = status; this.f = f; } @Override public String toString() { return "ModelObject [name=" + name + ", val=" + val + ", status=" + status + ", f=" + f + "]"; }} |
Ниже приведен список для преобразования объекта в представление JSON,
Example1.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
final Gson gson = new Gson();// original object instantiationModelObject modelObject = new ModelObject("myname", 12, true, 2.3);System.out.println("toJson ---");System.out.println("Original Java object : " + modelObject);// converting an object to json objectString json = gson.toJson(modelObject);System.out.println("Converted JSON string is : " + json);System.out.println("fromJson----");// getting object from json representationSystem.out.println("Original JSON string is : " + json);// converting json to objectModelObject modelObject1 = gson.fromJson(json, ModelObject.class);System.out.println("Converted Java object : " + modelObject1); |
Обратите внимание на сигнатуру fromJson (), он принимает второй аргумент как литерал класса целевого объекта.
Вывести следующим образом,
Пример-1-вывода
|
1
2
3
4
5
6
|
toJson ---Original Java object : ModelObject [name=myname, val=12, status=true, f=2.3]Converted JSON string is : {"name":"myname","val":12,"status":true,"f":2.3}fromJson----Original JSON string is : {"name":"myname","val":12,"status":true,"f":2.3}Converted Java object : ModelObject [name=myname, val=12, status=true, f=2.3] |
Пример 2: для общих объектов
Для преобразования обратно универсального объекта в java-объект из представления json нам нужно использовать use дополнительный объект, как показано ниже
Тип collectionType = new TypeToken <{generic-object-with-type-information}>>) {}. GetType ();
Вам необходимо предоставить тип класса назначения для информации о параметрах типа TypeToken, как показано выше. Это должно сформировать экземпляр Type, и нам нужно передать его методу fromJson () в качестве второго аргумента.
В следующем листинге приведен пример преобразования универсальных классов или классов из структуры коллекций в / из json
GenericModel.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
package in.ajduke.ap012;/*** An generified model for demo of gson conversion * @author ajduke*/public class GenericModel<T> { T value; public GenericModel(T value) { super(); this.value = value; } @Override public String toString() { return "Model2 [value=" + value + "]"; }} |
Example2.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
Gson gson = new Gson();System.out.println("A generic object demo");// a generified objectGenericModel<Integer> model = new GenericModel<>(12);// converting to json representationString json = gson.toJson(model);System.out.println("json representation :" + json);// converting back to objectType collectionType = new TypeToken<GenericModel<Integer>>() {}.getType();GenericModel<Integer> modelObj = gson.fromJson(json, collectionType);System.out.println("converted object representation: " + modelObj);System.out.println("\nA object from collection framework\n");// for collection framework objectsList<String> listOfString = new ArrayList<>();listOfString.add("ajduke");listOfString.add("ajduchess");// conversion to jsonString jsonStr = gson.toJson(listOfString);System.out.println("json representation :" + jsonStr);Type collectionType2 = new TypeToken<List<String>>() {}.getType();List<String> listObj = gson.fromJson(jsonStr, collectionType2);System.out.println("converted object representation: " + listObj); |
Вывести следующим образом
Пример2-вывода
|
1
2
3
4
5
6
7
8
|
A generic object demojson representation :{"value":12}converted object representation: Model2 [value=12] A object from collection framework json representation :["ajduke","ajduchess"]converted object representation: [ajduke, ajduchess] |
Пример 3: использование переходного процесса
Если вы не хотите включать какое-либо поле в представление json, вы можете использовать модификатор transient для объявления переменной, затем при преобразовании его в представление json GSON игнорирует эту переменную. Но при преобразовании обратно в объект из строки json он инициализирует значение по умолчанию в зависимости от типа переменной.
Рассмотрим наш ModelObject и давайте пропустим целочисленное значение val из представления json, поэтому изменим его объявление, чтобы оно было переходным, как в следующем листинге
ModelObject2.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package in.ajduke.ap012;/*** An model for demo of gson conversion * * @author ajduke*/public class ModelObject { String name; transient int val; boolean status; double f; public ModelObject(String name, int val, boolean status, double f) { super(); this.name = name; this.val = val; this.status = status; this.f = f; } @Override public String toString() { return "ModelObject [name=" + name + ", val=" + val + ", status=" + status + ", f=" + f + "]"; }} |
Ниже приводится список
Example3.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
Gson gson = new Gson();// original objectModelObject modelObject = new ModelObject("namesake", 50, true, 4.3);System.out.print("Original Java object : ");System.out.println(modelObject);// converting to an json representationString json = gson.toJson(modelObject);System.out.print("Converted JSON string is : ");System.out.println(json);// getting back the object from json representationModelObject modelObject3 = gson.fromJson(json, ModelObject.class);System.out.print("Converted Java object : ");System.out.println(modelObject3); |
Таким образом, при его преобразовании GSON игнорирует и выводит вышеуказанное следующим образом
example3-вывода
|
1
2
3
4
|
Original Java object : ModelObject [name=namesake, val=50, status=true, f=4.3]Converted JSON string is : {"name":"namesake","status":true,"f":4.3}Converted Java object : ModelObject [name=namesake, val=0, status=true, f=4.3]Thats all folks, for GSON introduction !! |
Примечание: я дал небольшой фрагмент кода для всех примеров, чтобы получить полный список, перейдите в этот список на github.
Что дальше ?
В следующих статьях я покажу вам некоторые дополнительные возможности библиотеки GSON,
так что следите за обновлениями !!!