Гсон

Библиотека сериализации Java JSON
Google Gson
Разработчик(и)Google
Первоначальный выпуск22 мая 2008 г. ; 16 лет назад ( 2008-05-22 )
Стабильный релиз
2.11.0 [1]  / 20 мая 2024 г. ; 7 месяцев назад ( 20 мая 2024 )
Репозиторий
  • github.com/google/gson
Написано вЯва
Операционная системаКроссплатформенный
ЛицензияЛицензия Apache 2.0
Веб-сайтgithub.com/google/gson

Gson , или Google Gson, — это библиотека Java с открытым исходным кодом , которая сериализует объекты Java в JSON (и десериализует их обратно в Java).

История

Библиотека Gson изначально была разработана для внутренних целей в Google, версия 1.0 была выпущена 22 мая 2008 года в соответствии с условиями лицензии Apache License 2.0. Последняя версия, 2.11, была выпущена 20 мая 2024 года.

Использование

Gson использует рефлексию, что означает, что классы не нужно изменять для сериализации или десериализации. По умолчанию классу нужен только определенный конструктор по умолчанию (без аргументов); однако это требование можно обойти (см. Особенности).

Следующий пример демонстрирует базовое использование Gson при сериализации образца объекта:

пример пакета ; public class Car { public String manufacturer ; public String model ; public double capacity ; public boolean accident ;                общественный автомобиль () { }    общественный автомобиль ( производитель строки , модель строки , двойная вместимость , логическое значение аварии ) { этот.производитель = производитель ; эта.модель = модель ; эта.емкость = вместимость ; эта.авария = авария ; }                       @Override public String toString () { return ( "Производитель: " + производитель + ", " + "Модель: " + модель + ", " + "Мощность: " + мощность + ", " + "Авария: " + авария ); } }                           
пример пакета ; public class Person { public String name ; public String signature ; public Car [] cars ; public int phone ; public transient int age ;                    публичная персона () { }    public Person ( String name , String favorite , int phone , int age , Car [ ] cars ) { this.name = name ; this.family = nickname ; this.cars = cars ; this.phone = phone ; this.age = age ; }                            @Override public String toString () { StringBuilder sb = new StringBuilder (); sb.append ( " Имя: " ) .append ( name ) .append ( " " ) .append ( family ) .append ( " \n" ); sb.append ( " Телефон: " ) .append ( phone ) .append ( " \n" ); sb.append ( " Возраст: " ) .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 (); } }                            
основной пакет ; импорт пример.Автомобиль ; импорт пример.Человек ; импорт 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 (). 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 )); } }                                                

Вызов кода указанного выше класса Main приведет к следующему выводу JSON:

{ "имя" : "Джон" , "фамилия" : "Доу" , "автомобили" : [ { "производитель" : "Audi" , "модель" : "A4" , "емкость" : 1.8 , "авария" : false }, { "производитель" : "Škoda" , "модель" : "Octavia" , "емкость" : 2.0 , "авария" : true } ], "телефон" : 2025550191 }                             

Диаграмма с данными из JSON.

Поскольку поле возраста Person помечено как временное , оно не включается в вывод.

основной пакет ; импортировать пример.Персона ; импортировать com.google.gson.Gson ;  public class Main { public static void main ( String [] args ) { Gson gson = new Gson (); String json = "{\"имя\":\"Джон\",\"фамилия\":\"Доу\",\"автомобили\":[{\"производитель\":\"Audi\",\"модель\":\"A4\"," + "\"емкость\":1.8,\"авария\":false},{\"производитель\":\"Škoda\",\"модель\":\"Octavia\",\"емкость\"" + ":2.0,\"авария\":true}],\"телефон\":2025550191}" ; Person johnDoe = gson . fromJson ( json , Person . class ); System . out . println ( johnDoe . toString ()); } }                             

Чтобы десериализовать вывод, полученный в последнем примере, вы можете выполнить приведенный выше код, который сгенерирует следующий вывод:

Имя: Джон Доу Телефон: 2025550191 Возраст: 0 Автомобиль 1: Производитель: Audi, Модель: A4, Вместимость: 1.8, Авария: ложная Автомобиль 2: Производитель: Škoda, Модель: Octavia, Вместимость: 2.0, Авария: настоящая

Это показывает, как Gson можно использовать с системой модулей платформы Java для приведенного выше примера:

module GsonExample { require com . google . gson ; // Открыть пакет, объявленный в примере выше, чтобы позволить Gson использовать рефлексию для классов // внутри пакета (а также получить доступ к закрытым полям) открывает пример для com . google . gson ; }          

Более подробные примеры см. в руководстве по использованию Gson в их репозитории GitHub.

Функции

  • Gson может обрабатывать коллекции , универсальные типы и вложенные классы (включая внутренние классы , что невозможно сделать по умолчанию).
  • При десериализации Gson перемещается по дереву типов десериализуемого объекта, что означает, что он игнорирует дополнительные поля, присутствующие во входных данных JSON.
  • Пользователь может:
    • написать собственный сериализатор и/или десериализатор, чтобы иметь возможность контролировать весь процесс и даже десериализовать экземпляры классов, исходный код которых недоступен.
    • написать InstanceCreator, который позволит им десериализовать экземпляры классов без определенного конструктора без аргументов.
  • Gson обладает широкими возможностями настройки, так как вы можете указать:
  • Компактная/красивая печать (независимо от того, нужен ли вам компактный или читабельный вывод)
  • Как обрабатывать поля пустых объектов — по умолчанию они отсутствуют в выводе
  • Исключение полей — правила, определяющие, какие поля следует исключить из десериализации.
  • Как преобразовать имена полей Java

Ссылки

  1. ^ "Release 2.11.0". 20 мая 2024 г. Получено 22 июня 2024 г.

[1]

[2]

  • Gson на GitHub
  • Учебник Gson с примерами. Архивировано 31 октября 2020 г. на Wayback Machine.

Дальнейшее чтение

  1. Дополнительная информация о пакете com.google.gson (с javadoc.io)
  2. Дополнительная информация о классе Gson (с javadoc.io)
  1. ^ Женков, Якоб. «ГСОН – Гсон». Tutorials.jenkov.com . Проверено 28 декабря 2023 г.
  2. ^ Gson, Google, 2023-12-28 , получено 2023-12-28
Взято с "https://en.wikipedia.org/w/index.php?title=Gson&oldid=1237345581"