JSON (JavaScript Object Notation) on väga mitmekülgne ja väga populaarne andmevorming. Seda kasutatakse sageli veebirakenduste vaheliseks suhtluseks ja ka mugava viisina suurte struktureeritud rakenduste andmete salvestamiseks.

JSON on nii kasulik, et peaaegu kõik kaasaegsed programmeerimiskeeled pakuvad sellega töötamiseks sisseehitatud tuge, sealhulgas Go.

JSON-iga töötamine Go-s

Saate suurema osa JSON-iga tehtavast tööst jagada kahte üldkategooriasse: järjestamine ja jaotamise tühistamine. Vikipeedia defineerib järjestamist kui:

Arvutiteaduses on järjestamine protsess, mille käigus muudetakse objekti mäluesitus salvestamiseks või edastamiseks sobivasse andmevormingusse. Seda kasutatakse tavaliselt siis, kui andmeid tuleb teisaldada arvutiprogrammi erinevate osade vahel või ühest programmist teise.

Lihtsamalt öeldes on järjestamine muutujas salvestatud andmete teisendamiseks vormile, mida on lihtsam teisele programmile edastada. Jaotuse tühistamine on vastupidine protsess: see hõlmab transportimiseks vormindatud andmete võtmist ja nende teisendamist vormile, mida on teie programmi jaoks lihtsam kasutada.

instagram viewer

Teenuse Go abil saate algandmestruktuure JSON-i vormindada. Ja saate teha vastupidise toimingu, eraldades JSON-andmed Go muutujateks.

JSON-ile suunamine Go-s

Go pakub kodeering/json pakett et teil oleks JSON-iga lihtne töötada. See pakett sisaldab mitmeid funktsioone, kuid see, mida kasutate jaotamiseks, on marssal funktsiooni. marssal sellel on järgmine funktsiooni allkiri:

func marssal (v liides{}) ([]bait, viga)

See tähendab, et marssal aktsepteerib mis tahes andmetüübi parameetrit ja tagastab kaks väärtust: baitide osa ja vea. Teisisõnu helistate marssal väärtusega Go ja see teisendab selle JSON-iks ja tagastab JSON-i ekvivalendi. Kui sellel ilmneb teisendusprotsessi ajal tõrge, tagastab see vea ja tühja lõigu.

Siin on koodinäide, mis kasutab marssal kaardi teisendamiseks JSON-iks. Selle näite käivitamiseks peate looma Go-faili teie lemmikkoodiredaktorvõi kasutage Mine mänguväljakule:

pakett peamine

importida (
"kodeering/json"
"fmt"
)

func peamine(){
val := kaart[string]int{
"John": 25,
"maarja": 19,
"aadam": 5,
}

res, _ := json. marssal (val)
fmt.Println(string(res))
}

Kui käivitate selle koodi, väljastab see järgmise:

Nagu varem mainitud, saate JSON-i koondada mis tahes tüüpi Go-andmed, kuigi reaalses elus korraldate tavaliselt struktuure. Seetõttu pakub Go funktsiooni nimega struct tags, mis võimaldab teil anda marssal lisajuhised struktuuride teisendamiseks.

Struktuurimärgend on string, mille lisate oma struktuurideklaratsiooni välja andmetüübi kõrvale. Struktuurimärgendid võimaldavad teil viisi kohandada marssal käsitleb välja, kuhu silt kuulub. Struktuurimärgendite abil saate JSON-väljundis välja ümber nimetada või isegi selle täielikult välja jätta. Struktuursildid (see marssal tunneb ära) alustage alamstringiga "json:".

Näiteks oletagem, et teil on struktuur Auto mis esindab teavet auto kohta. Siin on kood a loomiseks Auto ja suunake see JSON-ile:

pakett peamine

importida (
"kodeering/json"
"fmt"
)

func peamine(){
tüüp Auto konstruktsioon {
Brändi string
Mudeli string
Hind int
}
val := Auto{Kaubamärk: "Mercedes", Mudel: "Benz", Hind: 50 000}
res, _ := json. marssal (val)
fmt.Println(string(res))
}

See kood annab väljundi:

The Bränd, Mudel, ja Hind väljad Auto tuleb alustada suurtähtedega või marssal ei saa neid teisendada. Selle tulemusena algavad JSON-i väljundväljad ka suurtähtedega. Aga mis siis, kui soovite, et nimed algaksid JSON-is väiketähtedega või kui soovite välja täielikult ümber nimetada? Siin tulevadki sisse struktuurisildid. Siin on näide:

pakett peamine
importida (
"kodeering/json"
"fmt"
)
func peamine(){
tüüp Auto konstruktsioon {
ID int `json:"-"`
Brändi string `json:"tüüp"`
Mudeli string `json:"mudel"`
Hind json:"hind"`
}
val := Auto{ID: 0, Kaubamärk: "Mercedes", Mudel: "Benz", Hind: 50 000}
res, _ := json. marssal (val)
fmt.Println(string(res))
}

See kood tutvustab uut ID-välja, mis marssal jätab JSON-i väljundist struct sildi kaudu välja. Kood kasutab ka teiste struktuuriväljade ümbernimetamiseks struktuurisilte. Siin on programmi väljund:

Nagu näete, saab "json:"-le järgnev struct-märgendi osa Marshali väljundis välja nimeks. On üks erand: kui see on string "-", jätab Marshal selle välja väljundist välja. Lisateavet Marshal ja struct siltide kohta saate lugeda Minge dokumentatsiooni.

JSON-i eemaldamine Go-s

Kodeerimis-/json-pakett pakub ka unarshaling'i funktsiooni, mida nimetatakse Unmarssal. Sellel on järgmine funktsiooni allkiri:

func Unmarshal (andmed []bait, v liides{}) viga

Erinevalt marssal, Unmarssal ei tagasta väärtust. Selle asemel aktsepteerib see JSON-i esimese argumendi baitide osana ja salvestab seejärel teisendatud andmed teise argumendiga viidatud objekti. Unmarssal töötab ka struct siltidega, kuid siin näitavad sildid Unmarssal millised JSON-väljad vastavad millistele struct väljadele.

Programmis vahekorra tühistamisel võite hankida andmeid API-st, kuid siin kasutate näivaid andmeid. Siin on, kuidas te kasutate Unmarssal:

pakett peamine

importida (
"kodeering/json"
"fmt"
)

func peamine(){
tüüp Auto konstruktsioon {
ID int `json:"-"`
Brändi string `json:"tüüp"`
Mudeli string `json:"mudel"`
Hind json:"hind"`
}

jsonInput := `{
"tüüp": "Toyota",
"mudel": "Camry",
"hind": 2000
}`

var jsonOutput Car
eksitus := json. Unmarshal([]bait(jsonInput), &jsonOutput)

if err != nil {
fmt. Println("JSON-i dekodeerimise viga!")
tagasi
}

fmt.Println(jsonOutput)
}

See kood kasutab sama autotüüpi, mis eelmine näide, ja lahutab JSON-objekti tüübist Car struktuuriks ja prindib seejärel struktuuris olevad andmed. Käivitamisel annab programm järgmise väljundi:

See näitab, et näiv-JSON-andmed eemaldati edukalt jsonOutput struktuur.

Go muudab JSON-iga töötamise lihtsaks

Kodeerimis-/json-paketiga on JSON-iga töötamine Go-s sama lihtne kui kaks funktsioonikutset: Marshaland Unmarshal. Go võimaldab teil ka JSON-i järjestamise/lahutamise protsessi struct-märgendite abil kohandada.

Andmete teisendamine JSON-vormingusse on suurepärane viis nende jagamiseks mõne teise programmi või protsessiga. Vorming on nii universaalne, et JSON on võimalikult kaasaskantav.