Gson (Github: https://github.com/google/gson) - это библиотека классов Java, предоставленную Google для сопоставления между объектами Java и данными JSON. Вы можете преобразовать строку JSON в объект Java, или наоборот.
Наиболее важными объектами в GSON являются 2 Gsons и GsonBuilders.
GSON имеет 2 самых основных метода (1) Tojson () для преобразования объектов Java в JSON
(2) Fromjson () преобразует JSON в Java Object
Напишите классы сущности:
Public Class People {string name; int возраст; логическое имя; public String getName () {return name; } public void setName (string name) {this.name = name; } public int getage () {return Age; } public void setage (int age) {this.age = age; } public boolean getSetName () {return setName; } public void setSetName (boolean setName) {this.setName = setName; } @Override public String toString () {return "name =" + name + "age =" + age + "setName =" + setName; }}Напишите тестовый класс Gsontest
Импорт com.google.gson.exclusionstrategy; import com.google.gson.fieldattributes; import com.google.gson.gson; import com.google.gson.gsonbuilder;/*** Преобразовать объект Java в json. */public class gsontest {public static void main (string [] args) {people p = new People (); P.Setage (20); p.setname («люди»); p.setsetname (true); Gson Gson = new Gson (); System.out.println (gson.tojson (p)); }}Результат вывода:
{"name": "Люди", "Возраст": 20, "setName": true}Это просто самый простой способ использовать GSON. Как его реализовать, если нам нужно преобразовать атрибут setName типа Bool, чтобы не преобразовать при преобразовании в JSON?
После долгого поиска в пакете GSON я обнаружил, что в пакете com.google.gson есть интерфейс. Хотя я не знаю, что он делает, основываясь на имени, можно сделать вывод, что этот интерфейс используется для установки стратегии исключения для преобразования GSON. Поэтому я проверил этот интерфейс на официальном веб-сайте http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html и обнаружил, что до тех пор, пока этот интерфейс реализован, и объект внедрения класса внедряется в GSON, когда он преобразует его в JSON, Gson Will Filter Offered Class или Attributes. Итак, следующий код:
Импорт com.google.gson.exclusionstrategy; import com.google.gson.fieldattributes; import com.google.gson.gson; import com.google.gson.gsonbuilder;/*** Преобразовать объект Java в JSON, пропустить конкретные файлы. */public class gsontest {public static void main (string [] args) {people p = new People (); P.Setage (20); p.setname («люди»); p.setsetname (true); ExclusionStrategy excludestrategy = new SetterExclusionStrategy (); Gson Gson1 = new GsonBuilder () .SetExclusionStrategies (excudEStrategy) .create (); GSON GSON2 = новый GSON (); String json1 = gson1.tojson (p); String json2 = gson2.tojson (p); System.out.println (json1); System.out.println (json2); Люди P1 = GSON1.FromJson (json1, People.class); Люди P2 = GSON2.FromJson (JSON2, People.class); System.out.println (P1); System.out.println (P2); } Частный статический класс setterexclusionstrategy реализует exclusionStrategy {public boolean woodskipclass (class <?> clazz) {return false; } public boolean weadskipfield (fieldattributes f) {return f.getName (). startSwith ("set"); }}}Оказывается, есть два способа создания объектов GSON: New GSON () означает создание объекта GSON, используя конфигурацию по умолчанию, и при создании метода GSONBUILDER.Create () вы можете настроить некоторые настройки, главным образом, чтобы сделать созданный GSON более подходящим для определенных конкретных ситуаций. Первый синий код в приведенном выше примере создает объект GSON, который обладает конфигурацией фильтрационных свойств, начиная со слова «Установить» (если вам нужно отфильтровать определенный тип, вы можете переписать метод wealskipclass (класс <?> Clazz), вы можете создать несколько объектов, создавая несколько объектов, создавая несколько объектов, которые могут создавать объективные объекты. И создавать объект. Изображение объекта. И создавать объект. И создавать объект. Изображение объекта. И создавать объективные объекты. И создавать объект. Изображение объекта. Следовательно, в этом примере при преобразовании объекта People в JSON набор атрибутов будет отфильтрован. Поскольку в JSON1 не существует атрибутов, при том, что он оставляет JSON1 в объект People, SetName логического типа не имеет значения, поэтому при печати значение логического типа по умолчанию принимается. Таким образом, были получены следующие результаты:
{"name": "Люди", "возраст": 20} {"name": "Люди", "Возраст": 20, "setName": true} name = people age = 20 setName = falseName = people age = 20 setName = true = trueGSON также поддерживает использование аннотаций. В пакете com.google.gson.antation есть несколько аннотаций, выставленных, следовательно, с тех пор и до. У каждого из них есть свои функции. Ниже приведен официальный пример для введения обычно используемых аннотаций:
Разоблачать:
Эта аннотация действует на атрибут, указывая на то, что при сериализации и десеризации этот атрибут будет подвергаться воздействию объекта GSON. Эта аннотация действительна только тогда, когда объект GSON создается с использованием метода GSONBUILDER и GSONBUILDER.EXCLUDEFIELDSWITHOUTEXPOSEANNOTIONTTION () называется, в противном случае он недействителен. Вот пример, представляющий, как использовать аннотацию @Expose:
открытый класс пользователь {@Expose Private String FirstName; @Expose (serialize = false) частная строка Lastname; @Expose (serialize = false, desorialize = false) частная строка emailAddress; Private String Password;}Если вы создаете объект GSON в новом методе GSON (), метод TOJSON () и метод Offjson () будет выполнять эти 4 свойства при сериализации и десеризации. Однако, если вы используете gson gson = new gsonbuilder (). Exklidefieldswithoutexposeannotation (). Create () для создания объектов GSON, методы Gson's Tojson () и FromJson () будут исключать поля пароля, поскольку поля пароля не помечены Annotation @Expose. Этот объект GSON также исключит поля LastName и EmailAddress, потому что атрибут сериализуется, аннотированный @Expose установлен на false. Точно так же GSON исключит поле EmailAddress во время десериализации, потому что десериализация устанавливается на false.
SerializedName:
Эта аннотация используется в атрибуте, указывая, что когда этот атрибут сериализуется в JSON, имя необходимо последовать сериализованию на значение, указанное атрибутом значения аннотации.
Эта аннотация будет переопределять любую FieldnamingPolicy, включая политику именования по умолчанию. Вот пример, представляющий, как используется аннотация @SerializedName:
открытый класс someclasswithfields {@serializedname ("name") private final String somefield; частная финальная строка Someotherfield; public someclasswithfields (string a, string b) {this.somefield = a; это. }}Следующий код показывают результаты сериализации вышеуказанного тестового класса:
Someclasswithfields objectToSerialize = new SomeClassWithFields ("a", "b"); gson gson = new gson (); string jsonrepresentation = gson.tojson (ObjectToSerialize); System.out.println (jsonrepresentation);Результат исполнения:
{"name": "a", "someotherfield": "b"}Можно видеть, что собственность «какое -то профиль» была сериализована для «названия».
Примечание. Имя атрибута, указанное в значении @SerializedName, должно быть действительным именем атрибута JSON.