Gson - Gson

Google Gson
Tuzuvchi (lar)Google
Dastlabki chiqarilish2008 yil 22-may; 12 yil oldin (2008-05-22)
Barqaror chiqish
2.8.6 / 4 oktyabr 2019 yil; 13 oy oldin (2019-10-04)
Ombor Buni Vikidatada tahrirlash
YozilganJava
Operatsion tizimO'zaro faoliyat platforma
LitsenziyaApache litsenziyasi 2.0
Veb-saytgithub.com/ google/ gson

Gson (shuningdek, Google Gson nomi bilan ham tanilgan) an ochiq manbali Java kutubxona seriyalash va Java ob'ektlarini seriyali (va undan) JSON.

Tarix

Gson kutubxonasi dastlab Google-ning ichki maqsadlari uchun ishlab chiqilgan va 1.0 versiyasi keyinchalik 2008 yil 22-mayda chiqarilgan. Apache litsenziyasi 2.0. Oxirgi versiyasi - 2.8.6 2019 yil 4 oktyabrda chiqdi.

Versiya tarixi

  • 2019 yil 4 oktyabr: 2.8.6 versiyasi
  • 2018 yil 21-may: 2.8.5-versiya
  • 2018 yil 1-may: 2.8.4-versiya
  • 2018 yil 27 aprel: 2.8.3 versiyasi
  • 2017 yil 19-sentabr: 2.8.2-versiya
  • 2017 yil 30-may: 2.8.1-versiya
  • 2016 yil 27 oktyabr: 2.8.0 versiyasi
  • 2016 yil 14-iyun: 2.7-versiya
  • 2016 yil 26-fevral: 2.6.2-versiya
  • 2016 yil 11-fevral: 2.6.1-versiya
  • 2016 yil 11-fevral: 2.6-versiya
  • 2015 yil 24-noyabr: 2.5-versiya
  • 2015 yil 4 oktyabr: 2.4 versiyasi
  • 2014 yil 20-noyabr: 2.3.1-versiya
  • 2014 yil 11-avgust: 2.3-versiya
  • 2013 yil 13-may: 2.2.4-versiya
  • 2013 yil 12 aprel: 2.2.3 versiyasi
  • 2012 yil 2-iyul: 2.2.2-versiya
  • 2012 yil 5-may: 2.2.1-versiya
  • 2012 yil 5-may: 2.2-versiya
  • 2011 yil 31 dekabr: 2.1-versiya
  • 2011 yil 13-noyabr: 2.0-versiya
  • 2011 yil 13 aprel: 1.7.1-versiya
  • 2011 yil 12 aprel: 1.7-versiya
  • 2010 yil 24-noyabr: 1.6-versiya
  • 2010 yil 19-avgust: 1.5-versiya
  • 2009 yil 9 oktyabr: 1.4-versiya
  • 2009 yil 1 aprel: 1.3-versiya
  • 2009 yil 12-yanvar: 1.3-beta versiyasi
  • 2008 yil 29 avgust: 1.2-versiya
  • 2008 yil 18-iyul: 1.1.1-versiya
  • 2008 yil 1-iyul: 1.1-versiya
  • 2008 yil 17 iyun: 1.0.1 versiyasi
  • 2008 yil 22-may: 1.0-versiya

Foydalanish

Gson foydalanadi aks ettirish, shuning uchun sinflarni o'zgartirish yoki serializatsiya qilishni o'zgartirish talab qilinmaydi. Odatiy bo'lib, u sinfga belgilangan no-args konstruktoriga ega bo'lishi kerak (atrofida ishlash mumkin, qarang) Xususiyatlari ).

Quyidagi misol namunali ob'ektni seriyalashda Gson-dan eng oddiy foydalanishni namoyish etadi:

modul GsonMisol {    talab qiladi gson;    talab qiladi java.kv; // gson tomonidan talab qilinadi    eksport Shaxs;    eksport Avtomobil;}
paket Avtomobil;jamoat sinf Avtomobil {    jamoat Ip ishlab chiqaruvchi;    jamoat Ip model;    jamoat ikki baravar imkoniyatlar;    jamoat mantiqiy baxtsiz hodisa;    jamoat Avtomobil() {    }    jamoat Avtomobil(Ip ishlab chiqaruvchi, Ip model, ikki baravar imkoniyatlar, mantiqiy baxtsiz hodisa) {        bu.ishlab chiqaruvchi = ishlab chiqaruvchi;        bu.model = model;        bu.imkoniyatlar = imkoniyatlar;        bu.baxtsiz hodisa = baxtsiz hodisa;    }    @Override    jamoat Ip toString() {        qaytish ("Ishlab chiqaruvchi:" + ishlab chiqaruvchi + ", " + "Model:" + model + ", " + "Imkoniyatlar:" + imkoniyatlar + ", " + "Baxtsiz hodisa:" + baxtsiz hodisa);    }}
paket Shaxs;Import Avtomobil;jamoat sinf Shaxs {    jamoat Ip ism;    jamoat Ip familiya;    jamoat Avtomobil[] mashinalar;    jamoat int telefon;    jamoat vaqtinchalik int yoshi;    jamoat Shaxs() {    }    jamoat Shaxs(Ip ism, Ip familiya, int telefon, int yoshi, Avtomobil[] mashinalar) {        bu.ism = ism;        bu.familiya = familiya;        bu.mashinalar = mashinalar;        bu.telefon = telefon;        bu.yoshi = yoshi;    }    @Override    jamoat Ip toString() {        StringBuilder sb = yangi StringBuilder();        sb.qo'shib qo'ying("Ism:").qo'shib qo'ying(ism).qo'shib qo'ying(" ").qo'shib qo'ying(familiya).qo'shib qo'ying(" n");        sb.qo'shib qo'ying("Telefon:").qo'shib qo'ying(telefon).qo'shib qo'ying(" n");        sb.qo'shib qo'ying("Yosh:").qo'shib qo'ying(yoshi).qo'shib qo'ying(" n");        int men = 0;        uchun (Avtomobil element : mashinalar) {            men++;            sb.qo'shib qo'ying("Avtomobil").qo'shib qo'ying(men).qo'shib qo'ying(": ").qo'shib qo'ying(element).qo'shib qo'ying(" n");        }        qaytish sb.toString();    }}

Qo'ng'iroq qilgandan keyin

paket Asosiy;Import Avtomobil;Import Shaxs. Shaxs;Import com.google.gson.Gson;jamoat sinf Asosiy {    jamoat statik bekor asosiy(Ip[] kamon) {        Gson gson = yangi Gson();        Avtomobil audi = yangi Avtomobil("Audi", "A4", 1.8, yolg'on);        Avtomobil skoda = yangi Avtomobil("Skoda", "Octavia", 2.0, to'g'ri);        Avtomobil[] mashinalar = {audi, skoda};        Shaxs johnDoe = yangi Shaxs("Jon", "Esh", 2025550191, 35, mashinalar);        Tizim.chiqib.println(gson.toJson(johnDoe));    }}

siz ushbu natijani olasiz:

{   "ism":"Jon",   "familiya":"Esh",   "mashinalar":[      {         "ishlab chiqaruvchi":"Audi",         "model":"A4",         "imkoniyat":1.8,         "baxtsiz hodisa":yolg'on      },      {         "ishlab chiqaruvchi":"Skoda",         "model":"Octavia",         "imkoniyat":2.0,         "baxtsiz hodisa":to'g'ri      }   ],   "telefon":2025550191}

Shaxsning "yoshi" maydoni vaqtinchalik deb belgilanganligi sababli, u natijaga kiritilmaydi.

So'nggi misol tomonidan ishlab chiqarilgan mahsulotni seriyalashtirish uchun siz quyidagi kodni bajarishingiz mumkin:

paket Asosiy;Import Shaxs. Shaxs;Import com.google.gson.Gson;jamoat sinf Asosiy {    jamoat statik bekor asosiy(Ip[] kamon) {        Gson gson = yangi Gson();        Ip json = "{" name  ": " John  ", " familiya  ": " Doe  ", " cars  ": [{" ishlab chiqaruvchi  ": " Audi  ", " model  ": " A4  "," +                "" hajmi  ": 1.8, " tasodif  ": noto'g'ri}, {" ishlab chiqaruvchi  ": " Škoda  ", " model  ": " Octavia  ", " hajmi  "" +                ": 2.0, " accident  ": true}], " phone  ": 2025550191}";        Shaxs johnDoe = gson.Jsondan(json, Shaxs.sinf);        Tizim.chiqib.println(johnDoe.toString());    }}

Va quyidagi hosil bo'ladi:

Ismi: John DoeTelefon: 2025550191Yosh: 0Avtomobil 1: Ishlab chiqaruvchi: Audi, Model: A4, Imkoniyatlar: 1.8, Baxtsiz hodisa: yolg'on Avtomobil 2: Ishlab chiqaruvchi: Škoda, Model: Octavia, Imkoniyatlar: 2.0, Baxtsiz hodisa: rost

Quyidagi misol Gson kutubxonasi yordamida Json-ni qanday qilib chiroyli tarzda chop etishni ko'rsatib beradi.

Import com.google.gson.Gson;Import com.google.gson.GsonBuilder;Import java.nio.file.Files;Import java.nio.file.Paths;Import java.util.Arrays;Import java.util.List;Import lombok.SneakyTrows;jamoat sinf PrettyPrintExample {  // SneakyThrows izohi barcha tekshirilgan istisnolarni ichki e'lon qiladi.  @Sherlar  jamoat statik bekor asosiy(Ip[] kamon) {    Ro'yxat<Ip> mashinalar= Massivlar.asList("Fiat","BMW","Lamborghini");    // Yangi GSON ob'ekti yarating    Gson gson = yangi GsonBuilder().setPrettyPrinting().yaratmoq();    Ip dilbar=gson.toJson(mashinalar);    Tizim.chiqib.println("chiroyli"+dilbar);  }}

Va quyidagi hosil bo'ladi:

chiroyli ["Fiat", "BMW", "Lamborghini")

Xususiyatlari

  • Gson kollektsiyalarni, umumiy turlarni va ichki sinflarni boshqarishi mumkin (ichki sinflarni o'z ichiga olgan holda, buni sukut bo'yicha bajarish mumkin emas)
  • Deserializatsiya qilinayotganda Gson deserializatsiya qilinayotgan ob'ektning tur daraxtida harakat qiladi. Bu JSON kiritishida mavjud bo'lgan qo'shimcha maydonlarni e'tiborsiz qoldirishga olib keladi.
  • Foydalanuvchi butun jarayonni boshqarishi va hatto (de) manba kodi mavjud bo'lmagan sinflar misollarini seriyalashi uchun maxsus serializer va / yoki deserializer yozishi mumkin.
  • Foydalanuvchi InstanceCreator-ni yozishi mumkin, bu ularga no-args konstruktorisiz sinflarning misollarini seriyallashtirishga imkon beradi.
  • Gson juda moslashtirilgan, siz quyidagilarni belgilashingiz mumkin:
  • Yilni / chiroyli bosib chiqarish (siz ixcham yoki o'qiladigan chiqishni xohlaysizmi)
  • Nol ob'ekt maydonlarini qanday boshqarish kerak - sukut bo'yicha ular chiqishda mavjud emas
  • Qaysi maydonlarni ketma-ketlashtirishdan (de) chiqarib tashlash qoidalari
  • Java maydon nomlarini qanday o'zgartirish mumkin

Tashqi havolalar