В мире 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 instantiation ModelObject modelObject = new ModelObject( "myname" , 12 , true , 2.3 ); System.out.println( "toJson ---" ); System.out.println( "Original Java object : " + modelObject); // converting an object to json object String json = gson.toJson(modelObject); System.out.println( "Converted JSON string is : " + json); System.out.println( "fromJson----" ); // getting object from json representation System.out.println( "Original JSON string is : " + json); // converting json to object ModelObject 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 object GenericModel<Integer> model = new GenericModel<>( 12 ); // converting to json representation String json = gson.toJson(model); System.out.println( "json representation :" + json); // converting back to object Type 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 objects List<String> listOfString = new ArrayList<>(); listOfString.add( "ajduke" ); listOfString.add( "ajduchess" ); // conversion to json String 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 demo json 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 object ModelObject modelObject = new ModelObject( "namesake" , 50 , true , 4.3 ); System.out.print( "Original Java object : " ); System.out.println(modelObject); // converting to an json representation String json = gson.toJson(modelObject); System.out.print( "Converted JSON string is : " ); System.out.println(json); // getting back the object from json representation ModelObject 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,
так что следите за обновлениями !!!