Статьи

Начало работы с Google GSON

В мире 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,

так что следите за обновлениями !!!

Ссылка: Начало работы с Google GSON от нашего партнера JCG Абхиджита Сутара в блоге ajduke .