JSON (JavaScript Object Notation) on erittäin monipuolinen ja erittäin suosittu tietomuoto. Sitä käytetään usein verkkosovellusten väliseen viestintään ja myös kätevänä tapana tallentaa suuria määriä strukturoitua sovellustietoa.
JSON on niin hyödyllinen, että lähes kaikki nykyaikaiset ohjelmointikielet tarjoavat sisäänrakennetun tuen sen kanssa työskentelemiseen, mukaan lukien Go.
Työskentely JSONin kanssa Gossa
Voit jakaa suurimman osan JSON: n kanssa tekemästäsi työstä kahteen yleiseen luokkaan: jako ja erottelu. Wikipedia määrittelee järjestyksen seuraavasti:
Tietojenkäsittelytieteessä järjestely on prosessi, jossa kohteen muistiesitys muunnetaan tallennus- tai siirtoon soveltuvaksi tietomuotoon. Sitä käytetään tyypillisesti, kun tietoja on siirrettävä tietokoneohjelman eri osien välillä tai ohjelmasta toiseen.
Yksinkertaisemmin sanottuna järjestely on prosessi, jossa muuttujaan tallennetut tiedot muunnetaan muotoon, joka on helpompi siirtää toiseen ohjelmaan. Purkaminen on käänteinen prosessi: se edellyttää kuljetusta varten muotoiltujen tietojen ottamista ja muuntamista muotoon, jota ohjelmasi on helpompi käyttää.
Go: n avulla voit yhdistää alkuperäiset tietorakenteet JSONiin. Ja voit suorittaa käänteisen toiminnon poistamalla JSON-tiedot Go-muuttujiksi.
Jakaminen JSONiin Gossa
Go tarjoaa koodaus/json-paketti jotta sinun on helppo työskennellä JSONin kanssa. Tämä paketti sisältää useita toimintoja, mutta se, jota käytät järjestämiseen, on Marsalkka toiminto. Marsalkka sillä on seuraava funktion allekirjoitus:
func marsalkka (v käyttöliittymä{}) ([]tavu, virhe)
Se tarkoittaa, että Marsalkka hyväksyy minkä tahansa tietotyypin parametrin ja palauttaa kaksi arvoa: tavulohkon ja virheen. Toisin sanoen soitat Marsalkka Go-arvolla, ja se muuntaa sen JSONiksi ja palauttaa JSON-vastineen. Jos se kohtaa virheen muunnosprosessin aikana, se palauttaa virheen ja tyhjän osion.
Tässä on esimerkkikoodi, joka käyttää Marsalkka muuntaaksesi kartan JSON-muotoon. Tämän esimerkin suorittamiseksi sinun tarvitsee vain luoda Go-tiedosto suosikkikoodieditorisitai käytä Mene leikkikentälle:
paketti pää
tuonti (
"koodaus/json"
"fmt"
)func pää(){
val := kartta[merkkijono]int{
"John": 25,
"maria": 19,
"adam": 5,
}
res, _ := json. marsalkka (val)
fmt.Println(merkkijono(res))
}
Jos suoritat tämän koodin, se tulostaa seuraavan:
Kuten aiemmin mainittiin, voit jakaa minkä tahansa tyyppisen Go-datan JSONiin, vaikka tosielämässä yleensä jaat rakenteita. Tästä syystä Go tarjoaa ominaisuuden nimeltä struct tags, jonka avulla voit antaa Marsalkka lisäohjeet rakenteiden muuntamiseen.
Rakennetunniste on merkkijono, jonka sisällytät struct-määrittelyyn kentän tietotyypin viereen. Rakennetunnisteiden avulla voit säätää tapaa Marsalkka käsittelee kenttää, johon tunniste kuuluu. Voit käyttää struct-tageja nimeämään kentän uudelleen JSON-tulostuksessa tai jopa jättää sen kokonaan pois. Rakennetunnisteet (että Marsalkka tunnistaa) alkaa alimerkkijonolla "json:".
Oletetaan esimerkiksi, että sinulla on rakenne Auto joka edustaa jotain tietoa autosta. Tässä on koodi a Auto ja siirrä se JSONille:
paketti pää
tuonti (
"koodaus/json"
"fmt"
)
func pää(){
tyyppi auton rakenne {
Merkkijono
Mallimerkkijono
Hinta int
}
val := Auto{Brändi: "Mercedes", Malli: "Benz", Hinta: 50 000}
res, _ := json. marsalkka (val)
fmt.Println(merkkijono(res))
}
Tämä koodi tuottaa tulosteen:
The Brändi, Malli, ja Hinta aloilla Auto täytyy aloittaa isoilla kirjaimilla tai Marsalkka ei voi muuntaa niitä. Tämä johtaa siihen, että myös JSON-tulostuskentät alkavat isoilla kirjaimilla. Mutta entä jos haluat nimet alkavan pienillä kirjaimilla JSONissa tai jos haluat nimetä kentän kokonaan uudelleen? Siellä struct tagit tulevat mukaan. Tässä on esimerkki:
paketti pää
tuonti (
"koodaus/json"
"fmt"
)
func pää(){
tyyppi auton rakenne {
ID int `json:"-"`
Tuotemerkkijono `json:"tyyppi"`
Mallimerkkijono `json:"malli"`
Hinta int `json:"hinta"`
}
val := Auto{ID: 0, merkki: "Mercedes", Malli: "Benz", Hinta: 50 000}
res, _ := json. marsalkka (val)
fmt.Println(merkkijono(res))
}
Tämä koodi esittelee uuden tunnuskentän, joka Marsalkka jättää pois JSON-lähdöstä struct-tunnisteen kautta. Koodi käyttää myös struct-tageja muiden struct-kenttien nimeämiseen uudelleen. Tässä ohjelman tulos:
Kuten näet, "json:":n jälkeisestä struct-tunnisteen osasta tulee kentän nimi Marshalin tulostuksessa. On yksi poikkeus: jos se on merkkijono "-", Marshal jättää tämän kentän pois tulosteesta. Voit lukea lisää Marshal- ja struct-tageista Mene dokumentaatioon.
Irrotus JSONista Gossa
Encoding/json-paketti tarjoaa myös purkaustoiminnon, jota kutsutaan Unmarsalkka. Siinä on seuraava funktion allekirjoitus:
func Unmarshal (data []tavu, v käyttöliittymä{}) virhe
Toisin kuin Marsalkka, Unmarsalkka ei palauta arvoa. Sen sijaan se hyväksyy JSON: n tavulohkona ensimmäisessä argumentissa ja tallentaa sitten muunnetut tiedot objektiin, johon sen toinen argumentti osoittaa. Unmarsalkka toimii myös struct-tunnisteiden kanssa, mutta tässä tagit kertovat Unmarsalkka mitkä JSON-kentät vastaavat mitä struct-kenttiä.
Kun irrotat ohjelmassa, saatat hakea tietoja API: sta, mutta tässä käytät valedataa. Näin käytät Unmarsalkka:
paketti pää
tuonti (
"koodaus/json"
"fmt"
)func pää(){
tyyppi auton rakenne {
ID int `json:"-"`
Tuotemerkkijono `json:"tyyppi"`
Mallimerkkijono `json:"malli"`
Hinta int `json:"hinta"`
}jsonInput := `{
"tyyppi": "Toyota",
"malli": "Camry",
"hinta": 2000
}`var jsonOutput Car
virhe := json. Unmarsalkka([]tavu(jsonInput), &jsonOutput)jos err != nolla {
fmt. Println("JSON-dekoodausvirhe!")
palata
}
fmt.Println(jsonOutput)
}
Tämä koodi käyttää samaa autotyyppiä kuin edellinen esimerkki, ja se purkaa JSON-objektin Car-tyypin rakenteeseen ja tulostaa sitten rakenteen tiedot. Kun ohjelma ajetaan, se tuottaa seuraavan tulosteen:
Tämä osoittaa, että väärennetyt JSON-tiedot on poistettu onnistuneesti tiedostoon jsonOutput struct.
Go tekee JSON-työskentelystä helppoa
Encoding/json-paketilla työskentely JSONin kanssa Gossa on yhtä yksinkertaista kuin kaksi funktiokutsua: Marshaland Unmarshal. Go antaa sinun myös mukauttaa JSON-jakoa/poistamisprosessia struct-tageilla.
Tietojen muuntaminen JSON-muotoon on loistava tapa jakaa ne toisen ohjelman tai prosessin kanssa. Muoto on niin universaali, että JSON on niin kannettava kuin mahdollista.