JSON (JavaScript Object Notation) je zelo vsestranski in zelo priljubljen format podatkov. Pogosto se uporablja za komunikacijo med spletnimi aplikacijami in tudi kot priročen način za shranjevanje velikih količin strukturiranih aplikacijskih podatkov.
JSON je tako uporaben, da imajo skoraj vsi sodobni programski jeziki vgrajeno podporo za delo z njim, vključno z Go.
Delo z JSON v Go
Večino dela, ki ga boste opravili z JSON, lahko razdelite v dve splošni kategoriji: razvrščanje in razstavljanje. Wikipedia definira marshaling kot:
V računalništvu je marshaling proces pretvorbe pomnilniške predstavitve predmeta v podatkovni format, primeren za shranjevanje ali prenos. Običajno se uporablja, ko je treba podatke premikati med različnimi deli računalniškega programa ali iz enega programa v drugega.
Preprosteje povedano, je marshaling postopek pretvorbe podatkov, shranjenih v spremenljivki, v obliko, ki jo je lažje prenesti v drug program. Razvrščanje je obraten postopek: vključuje sprejemanje formatiranih podatkov za prenos in njihovo pretvorbo v obliko, ki jo vaš program lažje uporablja.
Z uporabo Go lahko izvorne podatkovne strukture razvrstite v JSON. Izvedete lahko tudi obratno dejanje, podatke JSON razvrstite v spremenljivke Go.
Razvrščanje v JSON v Go
Go zagotavlja kodiranje/json paket da vam olajša delo z JSON. Ta paket vsebuje več funkcij, toda tista, ki jo boste uporabljali za razvrščanje, je maršal funkcijo. maršal ima naslednji podpis funkcije:
funk maršal (v vmesnik{}) ([]bajt, napaka)
To pomeni da maršal sprejme parameter katerega koli tipa podatkov in vrne dve vrednosti: rezino bajtov in napako. Z drugimi besedami, pokličete maršal z vrednostjo Go in jo pretvori v JSON ter vrne ekvivalent JSON. Če med postopkom pretvorbe naleti na napako, bo vrnil napako in prazno rezino.
Tukaj je primer kode, ki uporablja maršal za pretvorbo zemljevida v JSON. Če želite zagnati ta primer, morate le ustvariti datoteko Go v vaš najljubši urejevalnik kode, ali uporabite Pojdi na igrišče:
paket glavni
uvoz (
"kodiranje/json"
"fmt"
)funk glavni(){
val := zemljevid[niz]int{
"Janez": 25,
"mary": 19,
"adam": 5,
}
res, _ := json. maršal (val)
fmt.Println(vrvica(res))
}
Če zaženete to kodo, bo izpisala naslednje:
Kot smo že omenili, lahko katero koli vrsto podatkov Go razvrstite v JSON, čeprav boste v resničnem življenju običajno razvrščali strukture. Zaradi tega Go ponuja funkcijo, imenovano struct tags, ki vam omogoča dajanje maršal dodatna navodila za pretvorbo vaših struktur.
Strukturna oznaka je niz, ki ga vključite v svojo strukturno deklaracijo poleg podatkovnega tipa polja. Oznake Struct vam omogočajo prilagoditev načina maršal obravnava polje, ki mu oznaka pripada. Z oznakami struct lahko preimenujete polje v izhodu JSON ali ga celo v celoti izpustite. Strukturne oznake (to maršal prepozna) se začnejo s podnizom "json:".
Recimo, da imate strukturo avto ki predstavlja nekaj informacij o avtomobilu. Tukaj je koda za ustvarjanje a avto in ga marširaj v JSON:
paket glavni
uvoz (
"kodiranje/json"
"fmt"
)
funk glavni(){
vrsta Car struct {
Vrvica blagovne znamke
Modelna vrvica
Cena int
}
val := Avto{Blagovna znamka: "Mercedes", Model: "Benz", Cena: 50000}
res, _ := json. maršal (val)
fmt.Println(vrvica(res))
}
Ta koda ustvari rezultat:
The Znamka, Model, in Cena področja avto treba začeti z velikimi črkami, oz maršal jih ne bo mogel pretvoriti. Rezultat tega je, da se tudi izhodna polja JSON začnejo z velikimi črkami. Kaj pa, če želite, da se imena v JSON začnejo z malimi črkami ali če želite v celoti preimenovati polje? Tu pridejo na vrsto oznake struct. Tukaj je primer:
paket glavni
uvoz (
"kodiranje/json"
"fmt"
)
funk glavni(){
vrsta Car struct {
ID int `json:"-"`
Niz znamke `json:"vrsta"`
Niz modela `json:"model"`
Cena v `json:"cena"`
}
val := Car{ID: 0, Znamka: "Mercedes", Model: "Benz", Cena: 50000}
res, _ := json. maršal (val)
fmt.Println(vrvica(res))
}
Ta koda uvaja novo ID polje, ki maršal izpusti iz izhoda JSON prek oznake struct. Koda uporablja tudi oznake struct za preimenovanje drugih polj struct. Tukaj je rezultat programa:
Kot lahko vidite, del oznake struct, ki sledi "json:", postane ime polja v Marshalovem izhodu. Obstaja ena izjema: če je to niz "-", Marshal to polje izpusti iz izpisa. Več o oznakah Marshal in struct lahko preberete v Pojdi na dokumentacijo.
Razvrščanje iz JSON v Go
Paket encoding/json ponuja tudi funkcijo razvrščanja, imenovano Unmarshal. Ima naslednji funkcijski podpis:
func Unmarshal (podatki []bajt, v vmesnik{}) napaka
Za razliko od maršal, Unmarshal ne vrne vrednosti. Namesto tega sprejme JSON kot rezino bajtov v prvem argumentu in nato shrani pretvorjene podatke v objekt, na katerega kaže njegov drugi argument. Unmarshal deluje tudi z oznakami struct, toda tukaj oznake povedo Unmarshal katera polja JSON se ujemajo s katerimi polji strukture.
Pri razporejanju v programu lahko pridobivanje podatkov iz API-ja, vendar boste tukaj uporabljali navidezne podatke. Takole ga uporabljate Unmarshal:
paket glavni
uvoz (
"kodiranje/json"
"fmt"
)funk glavni(){
vrsta Car struct {
ID int `json:"-"`
Niz znamke `json:"vrsta"`
Niz modela `json:"model"`
Cena v `json:"cena"`
}jsonInput := `{
"vrsta": "Toyota",
"model": "Camry",
"cena": 2000
}`var jsonOutput Car
napaka := json. Unmarshal([]bajt(jsonInput), &jsonOutput)if err != nil {
fmt. Println("Napaka pri dekodiranju JSON!")
vrnitev
}
fmt.Println(jsonOutput)
}
Ta koda uporablja isti tip Car kot prejšnji primer in razvrsti objekt JSON v strukturo tipa Car, nato pa natisne podatke v strukturi. Ko se program zažene, ustvari ta rezultat:
To kaže, da so bili navidezni podatki JSON uspešno razporejeni v jsonOutput struct.
Go olajša delo z JSON
S paketom encoding/json je delo z JSON v Go preprosto kot dva klica funkcij: Marshaland Unmarshal. Go omogoča tudi prilagajanje postopka razvrščanja/razvrščanja JSON z oznakami struct.
Pretvorba podatkov v JSON je odličen način za njihovo skupno rabo z drugim programom ali procesom. Format je tako univerzalen, da je JSON čim bolj prenosljiv.