Гсон
![]() | В данной статье поднимается несколько вопросов. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Разработчики) | |
---|---|
Начальная версия | 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 при сериализации образца объекта:
упаковки пример ;
общественный класс Car {
публичной строки производитель ;
публичная строковая модель ;
общественная двойная вместимость ;
публичная логическая авария ;
public Car () {
}
public Car ( строки производитель , строки модель , двойная емкость , логическая авария ) {
this . производитель = производитель ;
этот . модель = модель ;
этот . емкость = емкость ;
этот . несчастный случай = несчастный случай ;
}
@Override
public String toString () {
return ( "Производитель: " + производитель + ", " + "Модель: " + модель + ", " + "Мощность: " + мощность + ", " + "Авария: " + авария );
}
}
упаковки пример ;
общественный класс Person {
публичной строки имя ;
общедоступная строка фамилия ;
общественный автомобиль [] автомобили ;
общественный международный телефон ;
общественный переходный int age ;
public Person () {
}
public Person ( строка имени , строка фамилии , int телефон , int возраст , Car [] cars ) {
this . имя = имя ;
этот . фамилия = фамилия ;
этот . автомобили = автомобили ;
этот . телефон = телефон ;
этот . возраст = возраст ;
}
@Override
public String toString () {
StringBuilder sb = новый StringBuilder ();
сб . добавить ( "Имя:" ). добавить ( имя ). добавить ( " " ). добавить ( фамилия ). добавить ( "\n" );
сб . добавить ( "Телефон:" ). добавить ( телефон ). добавить ( "\n" );
сб . добавить ( «Возраст:» ). добавить ( возраст ). добавить ( "\n" );
интервал я = 0 ;
for ( Автомобиль : автомобили ) {
я ++ ;
сб . добавить ( «Автомобиль» ). добавить ( я ). добавить ( ":" ). добавить ( машина ). добавить ( "\n" );
}
вернуть что-л . нанизывать ();
}
}
пакет основной ;
импорта.Автомобиль пример ;
импорта.Человек пример ;
импортировать com.google.gson.Gson ;
импортировать com.google.gson.GsonBuilder ;
public class Main {
public static void main ( String [] args ) {
// Включаем красивую печать для демонстрационных целей
// Также можно напрямую создать экземпляр с помощью `new Gson()`; это создаст компактный JSON
Gson gson = new GsonBuilder (). setPrettyPrinting (). создавать ();
Автомобиль audi = новый автомобиль ( «Audi» , «A4» , 1.8 , false );
Автомобиль skoda = новый Автомобиль ( «Шкода» , «Октавия» , 2.0 , правда );
Автомобиль [] автомобили = { audi , skoda };
Человек johnDoe = новый человек ( «Джон» , «Доу» , 2025550191 , 35 , автомобили );
Система . вне . println ( gson . toJson ( johnDoe ));
}
}
Вызов кода вышеуказанного основного класса приведет к следующему выводу JSON:
{
"имя" : "Джон" ,
"фамилия" : "Доу" ,
"автомобили" : [
{
"производитель" : "Ауди" ,
"модель" : "А4" ,
"мощность" : 1,8 ,
"авария" : ложь
},
{
"производитель" : "Шкода" ,
"модель" : "Октавия" ,
"мощность" : 2.0 ,
"авария" : правда
}
],
"телефон" : 2025550191
}
поля Person Поскольку возраст помечен как временный , он не включается в выходные данные.
пакет основной ;
импорта.Человек пример ;
импортировать com.google.gson.Gson ;
общественный класс Main {
public static void main ( String [] args ) {
Gson gson = new Gson ();
String json = "{\"name\":\"Джон\",\"фамилия\":\"Доу\",\"cars\":[{\"производитель\":\"Audi\",\ "модель\":\"А4\"," +
"\"вместимость\":1,8,\"авария\":false},{\"производитель\":\"Škoda\",\"модель\": \"Октавия\",\"емкость\"" +
":2.0, \"авария\":истина}],\"телефон\":2025550191}" ;
Человек johnDoe = gson . fromJson ( json , Person . class );
Система . вне . println ( johnDoe . toString ());
}
}
Чтобы десериализовать выходные данные, полученные в последнем примере, вы можете выполнить приведенный выше код, который генерирует следующий вывод:
Имя: Джон Доу
Телефон: 2025550191
Возраст: 0
Автомобиль 1: Производитель: Audi, Модель: A4, Объем: 1.8, Авария: ложная
Автомобиль 2: Производитель: Škoda, Модель: Octavia, Объем: 2.0, Авария: правда
Это показывает, как Gson можно использовать с системой модулей платформы Java для приведенного выше примера:
модуль GsonExample {
требуется com . Google . гсон ;
// Открытие пакета, объявленного в приведенном выше примере, чтобы позволить Gson использовать отражение классов
// внутри пакета (а также доступ к закрытым полям),
открывает пример для com . Google . гсон ;
}
Более подробные примеры можно найти в руководстве по использованию 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 г.