Gson - Gson

Google Gson
Разработчики)Google
изначальный выпуск22 мая 2008 г.; 12 лет назад (2008-05-22)
Стабильный выпуск
2.8.6 / 4 октября 2019; 13 месяцев назад (2019-10-04)
Репозиторий Отредактируйте это в Викиданных
Написано вЯва
Операционная системаКроссплатформенность
ЛицензияЛицензия Apache 2.0
Интернет сайтgithub.com/Google/ gson

Gson (также известный как Google Gson) - это Открытый исходный код Ява библиотека в сериализовать и десериализовать объекты Java в (и из) JSON.

История

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

История версий

  • 4 октября 2019 г .: версия 2.8.6
  • 21 мая 2018 г .: версия 2.8.5
  • 1 мая 2018 г .: версия 2.8.4
  • 27 апреля 2018 г .: версия 2.8.3
  • 19 сентября 2017 г .: версия 2.8.2
  • 30 мая 2017 г .: версия 2.8.1
  • 27 октября 2016 г .: версия 2.8.0
  • 14 июня 2016 г .: версия 2.7
  • 26 февраля 2016 г .: версия 2.6.2
  • 11 февраля 2016 г .: версия 2.6.1
  • 11 февраля 2016 г .: версия 2.6
  • 24 ноября 2015 г .: версия 2.5
  • 4 октября 2015 г .: версия 2.4
  • 20 ноября 2014 г .: версия 2.3.1
  • 11 августа 2014 г .: версия 2.3
  • 13 мая 2013 г .: версия 2.2.4
  • 12 апреля 2013 г .: версия 2.2.3
  • 2 июля 2012 г .: версия 2.2.2
  • 5 мая 2012 г .: версия 2.2.1
  • 5 мая 2012 г .: версия 2.2
  • 31 декабря 2011 г .: версия 2.1
  • 13 ноября 2011 г .: версия 2.0
  • 13 апреля 2011 г .: версия 1.7.1
  • 12 апреля 2011 г .: версия 1.7
  • 24 ноября 2010 г .: Версия 1.6
  • 19 августа 2010 г .: версия 1.5
  • 9 октября 2009 г .: версия 1.4
  • 1 апреля 2009 г .: версия 1.3
  • 12 января 2009 г .: версия 1.3, бета
  • 29 августа 2008 г .: версия 1.2
  • 18 июля 2008 г .: Версия 1.1.1
  • 1 июля 2008 г .: версия 1.1
  • 17 июня 2008 г .: версия 1.0.1
  • 22 мая 2008 г .: версия 1.0

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

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

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

модуль GsonExample {    требует Gson;    требует Ява.sql; // Требуется gson    экспорт Человек;    экспорт Машина;}
упаковка Машина;общественный учебный класс Машина {    общественный Нить производитель;    общественный Нить модель;    общественный двойной емкость;    общественный логический авария;    общественный Машина() {    }    общественный Машина(Нить производитель, Нить модель, двойной емкость, логический авария) {        это.производитель = производитель;        это.модель = модель;        это.емкость = емкость;        это.авария = авария;    }    @Override    общественный Нить нанизывать() {        возвращаться ("Производитель:" + производитель + ", " + "Модель:" + модель + ", " + "Емкость: " + емкость + ", " + "Авария: " + авария);    }}
упаковка Человек;импорт Автомобиль.;общественный учебный класс Человек {    общественный Нить имя;    общественный Нить фамилия;    общественный Машина[] легковые автомобили;    общественный int Телефон;    общественный преходящий int возраст;    общественный Человек() {    }    общественный Человек(Нить имя, Нить фамилия, int Телефон, int возраст, Машина[] легковые автомобили) {        это.имя = имя;        это.фамилия = фамилия;        это.легковые автомобили = легковые автомобили;        это.Телефон = Телефон;        это.возраст = возраст;    }    @Override    общественный Нить нанизывать() {        StringBuilder сб = новый StringBuilder();        сб.добавить("Имя: ").добавить(имя).добавить(" ").добавить(фамилия).добавить(" п");        сб.добавить("Телефон: ").добавить(Телефон).добавить(" п");        сб.добавить("Возраст: ").добавить(возраст).добавить(" п");        int я = 0;        за (Машина элемент : легковые автомобили) {            я++;            сб.добавить("Машина ").добавить(я).добавить(": ").добавить(элемент).добавить(" п");        }        возвращаться сб.нанизывать();    }}

После звонка

упаковка Главный;импорт Автомобиль.;импорт Человек.;импорт com.google.gson.Gson;общественный учебный класс Главный {    общественный статический пустота главный(Нить[] аргументы) {        Gson Gson = новый Gson();        Машина audi = новый Машина(«Ауди», «А4», 1.8, ложный);        Машина Skoda = новый Машина(«Шкода», «Октавия», 2.0, истинный);        Машина[] легковые автомобили = {audi, Skoda};        Человек Джон Доу = новый Человек("Джон", "Лань", 2025550191, 35, легковые автомобили);        Система.из.println(Gson.toJson(Джон Доу));    }}

вы получите такой результат:

{   "имя":"Джон",   "фамилия":"Лань",   "легковые автомобили":[      {         "производитель":«Ауди»,         "модель":«А4»,         "емкость":1.8,         "авария":ложный      },      {         "производитель":«Шкода»,         "модель":«Октавия»,         "емкость":2.0,         "авария":истинный      }   ],   "Телефон":2025550191}

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

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

упаковка Главный;импорт Человек.;импорт com.google.gson.Gson;общественный учебный класс Главный {    общественный статический пустота главный(Нить[] аргументы) {        Gson Gson = новый Gson();        Нить json = "{" имя  ": " Джон  ", " фамилия  ": " Лань  ", " автомобили  ": [{" производитель  ": " Ауди  ", " модель  ": " A4  "," +                "" вместимость  ": 1.8, " авария  ": false}, {" производитель  ": " Škoda  ", " модель  ": " Octavia  ", " вместимость  "» +                ": 2.0, " авария  ": true}], " phone  ": 2025550191}";        Человек Джон Доу = Gson.fromJson(json, Человек.учебный класс);        Система.из.println(Джон Доу.нанизывать());    }}

И будет сгенерирован следующий вывод:

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

В следующем примере показано, как красиво распечатать Json с помощью библиотеки Gson.

импорт com.google.gson.Gson;импорт com.google.gson.GsonBuilder;импорт java.nio.file.Files;импорт java.nio.file.Paths;импорт java.util.Arrays;импорт java.util.List;импорт ломбок.;общественный учебный класс PrettyPrintExample {  // Аннотация SneakyThrows будет внутренне объявлять все отмеченные исключения.  @SneakyThrows  общественный статический пустота главный(Нить[] аргументы) {    Список<Нить> легковые автомобили= Массивы.asList(«Фиат»,"BMW","Ламборджини");    // Создаем новый объект GSON    Gson Gson = новый GsonBuilder().setPrettyPrinting().Создайте();    Нить prettyJson=Gson.toJson(легковые автомобили);    Система.из.println("симпатичный "+prettyJson);  }}

И будет сгенерирован следующий вывод:

довольно [«Фиат», «БМВ», «Ламборджини»]

Функции

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

внешняя ссылка