Гсон
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Разработчик(и) | |
---|---|
Первоначальный выпуск | 22 мая 2008 г |
Стабильная версия | 2.10.1 [1] ![]() |
Репозиторий | |
Написано в | Ява |
Операционная система | Кросс-платформенный |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | github |
Gson или Google Gson — это с открытым исходным кодом библиотека Java , которая сериализует объекты Java в JSON (и десериализует их обратно в Java).
История [ править ]
Библиотека Gson изначально была разработана для внутренних целей Google, а версия 1.0 была выпущена 22 мая 2008 г. в соответствии с условиями лицензии Apache 2.0. Последняя версия 2.10.1 была выпущена 6 января 2023 г.
Использование [ править ]
Gson использует отражение, а это означает, что классы не нужно модифицировать для сериализации или десериализации. По умолчанию классу нужен только определенный конструктор по умолчанию (без аргументов); однако это требование можно обойти (см. Возможности ).
В следующем примере показано базовое использование Gson при сериализации образца объекта:
package example;
public class Car {
public String manufacturer;
public String model;
public double capacity;
public boolean accident;
public Car() {
}
public Car(String manufacturer, String model, double capacity, boolean accident) {
this.manufacturer = manufacturer;
this.model = model;
this.capacity = capacity;
this.accident = accident;
}
@Override
public String toString() {
return ("Manufacturer: " + manufacturer + ", " + "Model: " + model + ", " + "Capacity: " + capacity + ", " + "Accident: " + accident);
}
}
package example;
public class Person {
public String name;
public String surname;
public Car[] cars;
public int phone;
public transient int age;
public Person() {
}
public Person(String name, String surname, int phone, int age, Car[] cars) {
this.name = name;
this.surname = surname;
this.cars = cars;
this.phone = phone;
this.age = age;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Name: ").append(name).append(" ").append(surname).append("\n");
sb.append("Phone: ").append(phone).append("\n");
sb.append("Age: ").append(age).append("\n");
int i = 0;
for (Car car : cars) {
i++;
sb.append("Car ").append(i).append(": ").append(car).append("\n");
}
return sb.toString();
}
}
package main;
import example.Car;
import example.Person;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class Main {
public static void main(String[] args) {
// Enable pretty printing for demonstration purposes
// Can also directly create instance with `new Gson()`; this will produce compact JSON
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Car audi = new Car("Audi", "A4", 1.8, false);
Car skoda = new Car("Škoda", "Octavia", 2.0, true);
Car[] cars = {audi, skoda};
Person johnDoe = new Person("John", "Doe", 2025550191, 35, cars);
System.out.println(gson.toJson(johnDoe));
}
}
Вызов кода вышеуказанного основного класса приведет к следующему выводу JSON:
{
"name": "John",
"surname": "Doe",
"cars": [
{
"manufacturer": "Audi",
"model": "A4",
"capacity": 1.8,
"accident": false
},
{
"manufacturer": "Škoda",
"model": "Octavia",
"capacity": 2.0,
"accident": true
}
],
"phone": 2025550191
}
поля Person Поскольку возраст помечен как временный , он не включается в выходные данные.
package main;
import example.Person;
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
Gson gson = new Gson();
String json = "{\"name\":\"John\",\"surname\":\"Doe\",\"cars\":[{\"manufacturer\":\"Audi\",\"model\":\"A4\"," +
"\"capacity\":1.8,\"accident\":false},{\"manufacturer\":\"Škoda\",\"model\":\"Octavia\",\"capacity\"" +
":2.0,\"accident\":true}],\"phone\":2025550191}";
Person johnDoe = gson.fromJson(json, Person.class);
System.out.println(johnDoe.toString());
}
}
Чтобы десериализовать выходные данные, полученные в последнем примере, вы можете выполнить приведенный выше код, который генерирует следующий вывод:
Name: John Doe
Phone: 2025550191
Age: 0
Car 1: Manufacturer: Audi, Model: A4, Capacity: 1.8, Accident: false
Car 2: Manufacturer: Škoda, Model: Octavia, Capacity: 2.0, Accident: true
Это показывает, как Gson можно использовать с системой модулей платформы Java для приведенного выше примера:
module GsonExample {
requires com.google.gson;
// Open package declared in the example above to allow Gson to use reflection on classes
// inside the package (and also access non-public fields)
opens example to com.google.gson;
}
Более подробные примеры можно найти в руководстве по использованию Gson в их репозитории GitHub .
Особенности [ править ]
- Gson может обрабатывать коллекции , универсальные типы и вложенные классы (включая внутренние классы , что невозможно по умолчанию).
- При десериализации Gson перемещается по дереву типов десериализуемого объекта, что означает, что он игнорирует дополнительные поля, присутствующие во входных данных JSON.
- Пользователь может:
- напишите собственный сериализатор и/или десериализатор, чтобы они могли контролировать весь процесс и даже десериализовать экземпляры классов, исходный код которых недоступен.
- напишите InstanceCreator, который позволит им десериализовать экземпляры классов без определенного конструктора без аргументов.
- Gson обладает широкими возможностями настройки, поскольку вы можете указать:
- Компактная/красивая печать (независимо от того, хотите ли вы компактный или читаемый результат)
- Как обрабатывать пустые поля объекта — по умолчанию они отсутствуют в выводе
- Исключение полей — правила того, какие поля следует исключить из десериализации.
- Как преобразовать имена полей Java
Ссылки [ править ]
- ^ «Выпуск 2.10.1» . 6 января 2023 г. Проверено 12 января 2023 г.
Внешние ссылки [ править ]
- Гсон на GitHub
- Учебное пособие по Gson с примерами. Архивировано 31 октября 2020 г. на Wayback Machine.
Дальнейшее чтение [ править ]
- Дополнительная информация о пакете com.google.gson (из javadoc.io )
- Дополнительная информация о классе Gson (из javadoc.io )
- ^ Женков, Якоб. «ГСОН – Гсон» . http://www.jenkov.com . Проверено 28 декабря 2023 г.
- ^ Gson , Google, 28 декабря 2023 г. , получено 28 декабря 2023 г.