JSON (JavaScript Object Notation) yra labai universalus ir labai populiarus duomenų formatas. Jis dažnai naudojamas ryšiui tarp žiniatinklio programų ir taip pat kaip patogus būdas saugoti didelius struktūrinių programų duomenų kiekius.

JSON yra toks naudingas, kad beveik visos šiuolaikinės programavimo kalbos teikia integruotą palaikymą darbui su juo, įskaitant „Go“.

Darbas su JSON „Go“.

Didžiąją dalį darbo, kurį atliksite su JSON, galite padalyti į dvi bendras kategorijas: skirstymą ir atskyrimą. Vikipedija apibrėžia skirstymą kaip:

Informatikos moksle skirstymas yra procesas, kai objekto atmintis paverčiama duomenų formatu, tinkamu saugojimui ar perdavimui. Paprastai jis naudojamas, kai duomenys turi būti perkelti iš vienos kompiuterio programos dalies į kitą arba iš vienos programos į kitą.

Paprasčiau tariant, skirstymas yra kintamajame saugomų duomenų konvertavimo į formą, kurią lengviau perduoti kitai programai, procesas. Atšaukimas yra atvirkštinis procesas: jis apima transportavimui suformatuotų duomenų paėmimą ir konvertavimą į formą, kurią programai lengviau naudoti.

instagram viewer

Naudodami „Go“, galite perkelti vietines duomenų struktūras į JSON. Taip pat galite atlikti atvirkštinį veiksmą, išskirdami JSON duomenis į Go kintamuosius.

Perjungimas į JSON „Go“.

Go suteikia kodavimo/json paketą kad jums būtų lengviau dirbti su JSON. Šiame pakete yra keletas funkcijų, tačiau tą, kurią naudosite skirstydami, yra maršalas funkcija. maršalas turi tokį funkcijos parašą:

Func Marshal (v sąsaja{}) ([]baitas, klaida)

Tai reiškia, kad maršalas priima bet kokio tipo duomenų parametrą ir grąžina dvi reikšmes: baitų dalį ir klaidą. Kitaip tariant, jūs skambinate maršalas su Go reikšme ir konvertuoja ją į JSON ir grąžina JSON atitikmenį. Jei konversijos proceso metu aptinkama klaida, ji grąžins klaidą ir tuščią skiltį.

Štai naudojamas kodo pavyzdys maršalas konvertuoti žemėlapį į JSON. Norėdami paleisti šį pavyzdį, viskas, ko jums reikia, yra sukurti Go failą savo mėgstamą kodų rengyklę, arba naudokite Eik į žaidimų aikštelę:

paketą pagrindinis

importuoti (
"kodavimas/json"
"fmt"
)

func pagrindinis(){
val := žemėlapis [eilutė]tarpt{
"jonas": 25,
"Marija": 19,
"adamas": 5,
}

res, _ := json. maršalas (val)
fmt.Spausdinti(styga(res))
}

Jei paleisite šį kodą, jis išves šiuos duomenis:

Kaip minėta anksčiau, bet kokio tipo „Go“ duomenis galite perkelti į JSON, nors realiame gyvenime paprastai skirsite struktūras. Dėl šios priežasties „Go“ teikia funkciją, vadinamą „struct tags“, kad galėtumėte duoti maršalas papildomos instrukcijos, kaip konvertuoti struktūras.

Struktūros žyma yra eilutė, kurią įtraukiate į savo struktūros deklaraciją šalia lauko duomenų tipo. Struktūrinės žymos leidžia koreguoti būdą maršalas apdoroja lauką, kuriam priklauso žyma. Galite naudoti struktūrines žymas, kad pervardytumėte lauką JSON išvestyje arba net visiškai jį praleistumėte. Struktūrinės žymos (tai maršalas atpažįsta) pradėkite eilute „json:“.

Pavyzdžiui, tarkime, kad turite struktūrą Automobilis kuri rodo tam tikrą informaciją apie automobilį. Štai kodas, skirtas sukurti a Automobilis ir perkelkite jį į JSON:

paketą pagrindinis

importuoti (
"kodavimas/json"
"fmt"
)

func pagrindinis(){
tipo Automobilio konstrukcija {
Prekės ženklo eilutė
Modelio eilutė
Kaina tarpt
}
val := Automobilis{Prekės ženklas: "Mercedes", Modelis: "Benz", Kaina: 50 000}
res, _ := json. maršalas (val)
fmt.Spausdinti(styga(res))
}

Šis kodas sukuria išvestį:

The Prekės ženklas, Modelis, ir Kaina srityse Automobilis reikia pradėti didžiosiomis raidėmis arba maršalas negalės jų konvertuoti. Dėl to JSON išvesties laukai taip pat prasideda didžiosiomis raidėmis. Bet ką daryti, jei norite, kad pavadinimai prasidėtų mažosiomis raidėmis JSON, arba jei norite visiškai pervardyti lauką? Čia atsiranda struktūrų žymos. Štai pavyzdys:

paketą pagrindinis
importuoti (
"kodavimas/json"
"fmt"
)
func pagrindinis(){
tipo Automobilio konstrukcija {
ID int `json:"-"`
Prekės ženklo eilutė `json:"tipo"`
Modelio eilutė `json:"modelis"`
Kaina json:"kaina"`
}
val := Automobilis{ID: 0, Prekinis ženklas: "Mercedes", Modelis: "Benz", Kaina: 50 000}
res, _ := json. maršalas (val)
fmt.Spausdinti(styga(res))
}

Šis kodas įveda naują ID lauką, kuris maršalas nepraleidžia JSON išvesties per struct žymą. Kodas taip pat naudoja struktūrines žymas, kad pervadintų kitus struct laukus. Štai programos išvestis:

Kaip matote, struct žymos dalis po „json:“ tampa lauko pavadinimu Maršalo išvestyje. Yra viena išimtis: jei tai eilutė „-“, Maršalas praleidžia šį lauką išvesties. Daugiau apie „Marshal“ ir „struct“ žymas galite perskaityti Eikite į dokumentus.

JSON atšaukimas naudojant Go

Kodavimo / json paketas taip pat suteikia atskyrimo funkciją, vadinamą Unmaršalas. Jis turi tokį funkcijos parašą:

func Unmarshal (duomenys []baitas, v sąsaja{}) klaida

Skirtingai nei maršalas, Unmaršalas negrąžina vertės. Vietoj to, jis priima JSON kaip baitų dalį pirmame argumente ir išsaugo konvertuotus duomenis objekte, į kurį nurodo antrasis argumentas. Unmaršalas veikia ir su struct žymomis, bet čia žymės pasakoja Unmaršalas kurie JSON laukai atitinka kokius struct laukus.

Kai programoje atšaukiate skirstymą, galite gauti duomenis iš API, bet čia naudosite netikrus duomenis. Štai kaip jūs naudojate Unmaršalas:

paketą pagrindinis

importuoti (
"kodavimas/json"
"fmt"
)

func pagrindinis(){
tipo Automobilio konstrukcija {
ID int `json:"-"`
Prekės ženklo eilutė `json:"tipo"`
Modelio eilutė `json:"modelis"`
Kaina json:"kaina"`
}

jsonInput := `{
"tipo": "Toyota",
"modelis": "Camry",
"kaina": 2000
}`

var jsonOutput automobilis
klaida := json. Unmaršalas ([]baitas(jsonInput), &jsonOutput)

if err != nil {
fmt. Println("JSON dekodavimo klaida!")
grąžinti
}

fmt.Spausdinti(jsonOutput)
}

Šiame kode naudojamas tas pats automobilio tipas, kaip ir ankstesniame pavyzdyje, JSON objektas išjungiamas į automobilio tipo struktūrą, tada spausdinami struktūroje esantys duomenys. Kai paleidžiama, programa sukuria šią išvestį:

Tai rodo, kad netikri JSON duomenys buvo sėkmingai išjungti į jsonOutput struktūra.

„Go“ palengvina darbą su JSON

Naudojant kodavimo / json paketą, darbas su JSON programoje Go yra toks pat paprastas kaip dviejų funkcijų iškvietimas: Marshaland Unmarshal. „Go“ taip pat leidžia tinkinti JSON suskirstymo / atšaukimo procesą naudojant „struct“ žymas.

Duomenų konvertavimas į JSON yra puikus būdas dalytis jais su kita programa ar procesu. Formatas yra toks universalus, kad JSON yra kuo nešiojamas.