JSON (JavaScript Object Notation) je veľmi všestranný a veľmi populárny dátový formát. Často sa používa na komunikáciu medzi webovými aplikáciami a tiež ako pohodlný spôsob ukladania veľkého množstva štruktúrovaných dát aplikácií.
JSON je taký užitočný, že takmer všetky moderné programovacie jazyky poskytujú vstavanú podporu pre prácu s ním, vrátane Go.
Práca s JSON v Go
Väčšinu práce, ktorú budete robiť s JSON, môžete rozdeliť do dvoch všeobecných kategórií: zaraďovanie a vyraďovanie. Wikipedia definuje zoraďovanie ako:
V informatike je zaraďovanie proces transformácie pamäťovej reprezentácie objektu na dátový formát vhodný na ukladanie alebo prenos. Zvyčajne sa používa, keď sa údaje musia presúvať medzi rôznymi časťami počítačového programu alebo z jedného programu do druhého.
Zjednodušene povedané, zaraďovanie je proces konvertovania údajov uložených v premennej do formy, ktorá sa ľahšie prenáša do iného programu. Demontáž je opačný proces: zahŕňa prevzatie údajov naformátovaných na prepravu a ich konverziu do formy, ktorá sa pre váš program ľahšie používa.
Pomocou Go môžete zaradiť natívne dátové štruktúry do JSON. A môžete vykonať opačnú akciu a rozložiť údaje JSON do premenných Go.
Zaraďovanie do JSON v aplikácii Go
Go poskytuje balík kódovania/json aby ste si uľahčili prácu s JSON. Tento balík obsahuje niekoľko funkcií, ale tú, ktorú budete používať na zaraďovanie, je tá maršal funkciu. maršal má nasledujúci funkčný podpis:
func Marshal (v rozhranie{}) ([]bajt, chyba)
To znamená, že maršal akceptuje parameter ľubovoľného typu údajov a vráti dve hodnoty: časť bajtov a chybu. Inými slovami, zavoláte maršal s hodnotou Go a skonvertuje ju na JSON a vráti ekvivalent JSON. Ak počas procesu konverzie narazí na chybu, vráti chybu a prázdny rez.
Tu je príklad kódu, ktorý používa maršal na konverziu mapy na JSON. Ak chcete spustiť tento príklad, všetko, čo potrebujete, je vytvoriť súbor Go váš obľúbený editor kódu, alebo použite Choďte na ihrisko:
balík Hlavná
importovať (
"kódovanie/json"
"fmt"
)func Hlavná(){
val := mapa[reťazec]int{
"John": 25,
"mary": 19,
"adam": 5,
}
res, _ := json. maršál (val)
fmt.Println(reťazec(res))
}
Ak tento kód spustíte, vypíše nasledovné:
Ako už bolo spomenuté, do JSON môžete zaradiť akýkoľvek typ údajov Go, hoci v skutočnom živote zvyčajne budete zaraďovať štruktúry. Z tohto dôvodu Go poskytuje funkciu nazývanú struct tags, ktorá vám umožňuje dávať maršal ďalšie pokyny na konverziu vašich štruktúr.
Značka struct je reťazec, ktorý zahrniete do deklarácie štruktúry vedľa typu údajov poľa. Značky Struct vám umožňujú upraviť spôsob maršal zaobchádza s poľom, do ktorého značka patrí. Značky struct môžete použiť na premenovanie poľa vo výstupe JSON alebo ho dokonca úplne vynechať. Štruktúrne značky (to maršal rozpozná) začnite podreťazcom "json:".
Povedzme napríklad, že máte štruktúru Auto ktorý predstavuje nejaké informácie o aute. Tu je kód na vytvorenie a Auto a zaraďte to do JSON:
balík Hlavná
importovať (
"kódovanie/json"
"fmt"
)
func Hlavná(){
typu Konštrukcia auta {
Reťazec značky
Modelový reťazec
cena int
}
val := Auto{Značka: "Mercedes", Model: "Benz", Cena: 50 000}
res, _ := json. maršál (val)
fmt.Println(reťazec(res))
}
Tento kód vytvára výstup:
The Značka, Model, a cena polia Auto treba začínať veľkými písmenami, príp maršal nebude možné ich previesť. Výsledkom je, že výstupné polia JSON začínajú tiež veľkými písmenami. Čo ak však chcete, aby názvy v JSON začínali malými písmenami, alebo ak chcete pole úplne premenovať? Tu prichádzajú na rad značky struct. Tu je príklad:
balík Hlavná
importovať (
"kódovanie/json"
"fmt"
)
func Hlavná(){
typu Konštrukcia auta {
ID int `json:"-"`
Reťazec značky `json:"typu"`
Modelový reťazec `json:"Model"`
Cena int `json:"cena"`
}
val := Auto{ID: 0, Značka: "Mercedes", Model: "Benz", Cena: 50 000}
res, _ := json. maršál (val)
fmt.Println(reťazec(res))
}
Tento kód zavádza nové pole ID, ktoré maršal vynechá z výstupu JSON prostredníctvom značky struct. Kód tiež používa značky struct na premenovanie ostatných polí struct. Tu je výstup programu:
Ako môžete vidieť, časť značky struct za "json:" sa stane názvom poľa vo výstupe Marshala. Existuje jedna výnimka: ak je to reťazec "-", Marshal vynechá toto pole z výstupu. Viac o značkách Marshal a struct si môžete prečítať v Prejdite na dokumentáciu.
Demontáž z JSON v aplikácii Go
Balík encoding/json poskytuje aj funkciu unmarshaling, tzv Unmaršal. Má nasledujúci podpis funkcie:
func Unmarshal (dáta []bajt, v rozhranie{}) chyba
Na rozdiel od maršal, Unmaršal nevracia hodnotu. Namiesto toho akceptuje JSON ako časť bajtov v prvom argumente a potom uloží skonvertované údaje do objektu, na ktorý ukazuje jeho druhý argument. Unmaršal funguje aj so značkami struct, ale tu to značky hovoria Unmaršal ktoré polia JSON zodpovedajú poliam štruktúr.
Pri rozraďovaní v programe by ste mohli načítať údaje z API, ale tu budete používať fiktívne údaje. Tu je návod, ako používate Unmaršal:
balík Hlavná
importovať (
"kódovanie/json"
"fmt"
)func Hlavná(){
typu Konštrukcia auta {
ID int `json:"-"`
Reťazec značky `json:"typu"`
Modelový reťazec `json:"Model"`
Cena int `json:"cena"`
}jsonInput := `{
"typu": "Toyota",
"Model": "Camry",
"cena": 2000
}`var jsonOutput Car
chyba := json. Unmaršal([]byte(jsonInput), &jsonOutput)if err != nula {
fmt. Println("Chyba dekódovania JSON!")
vrátiť
}
fmt.Println(jsonOutput)
}
Tento kód používa rovnaký typ auta ako predchádzajúci príklad a rozdelí objekt JSON do štruktúry typu Car a potom vytlačí údaje v štruktúre. Po spustení program vytvorí tento výstup:
To ukazuje, že fiktívne údaje JSON boli úspešne uvoľnené do súboru jsonOutput štrukturovať.
Go uľahčuje prácu s JSON
S balíkom encoding/json je práca s JSON v Go rovnako jednoduchá ako dve volania funkcií: Marshaland Unmarshal. Go vám tiež umožňuje prispôsobiť proces zaraďovania/rozraďovania JSON pomocou značiek struct.
Konverzia údajov do formátu JSON je skvelý spôsob, ako ich zdieľať s iným programom alebo procesom. Formát je taký univerzálny, že JSON je tak prenosný, ako sa len dá.