JSON (JavaScript Object Notation) je vysoce univerzální a velmi oblíbený datový formát. Často se používá pro komunikaci mezi webovými aplikacemi a také jako pohodlný způsob ukládání velkého množství strukturovaných dat aplikací.
JSON je tak užitečný, že téměř všechny moderní programovací jazyky poskytují integrovanou podporu pro práci s ním, včetně Go.
Práce s JSON v Go
Většinu práce, kterou budete dělat s JSON, můžete rozdělit do dvou obecných kategorií: zařazování a rozřazování. Wikipedie definuje řazení jako:
V informatice je seřazování proces transformace paměťové reprezentace objektu do datového formátu vhodného pro ukládání nebo přenos. Obvykle se používá, když je třeba přesouvat data mezi různými částmi počítačového programu nebo z jednoho programu do druhého.
Jednodušeji řečeno, zařazování je proces převodu dat uložených v proměnné do formy, kterou lze snáze předat jinému programu. Unmarshaling je opačný proces: zahrnuje převzetí dat naformátovaných pro přepravu a jejich převedení do podoby, která je pro váš program snazší k použití.
Pomocí Go můžete zařadit nativní datové struktury do JSON. A můžete provést opačnou akci, rozdělit data JSON do proměnných Go.
Zařazování do JSON v Go
Go poskytuje balíček kódování/json aby vám usnadnila práci s JSON. Tento balíček obsahuje několik funkcí, ale tu, kterou budete používat pro zařazování, je ta Maršál funkce. Maršál má následující podpis funkce:
func Marshal (v rozhraní{}) ([]bajt, chyba)
Tohle znamená tamto Maršál přijímá parametr libovolného datového typu a vrací dvě hodnoty: řez bajtů a chybu. Jinými slovy, zavoláte Maršál s hodnotou Go a převede ji na JSON a vrátí ekvivalent JSON. Pokud během procesu převodu narazí na chybu, vrátí chybu a prázdný řez.
Zde je příklad kódu, který používá Maršál převést mapu na JSON. Chcete-li spustit tento příklad, vše, co potřebujete, je vytvořit soubor Go váš oblíbený editor kódu, nebo použijte Jděte na hřiště:
balík hlavní
import (
"kódování/json"
"fmt"
)func hlavní(){
val := mapa[řetězec]int{
"John": 25,
"mary": 19,
"adam": 5,
}
res, _ := json. maršál (val)
fmt.Println(tětiva(res))
}
Pokud tento kód spustíte, vypíše následující:
Jak již bylo zmíněno, do JSON můžete zařadit jakýkoli typ dat Go, i když v reálném životě budete obvykle zařazovat struktury. Z tohoto důvodu Go poskytuje funkci nazvanou struct tags, která vám umožní dát Maršál další pokyny pro převod vašich struktur.
Značka struct je řetězec, který zahrnete do deklarace struktury vedle datového typu pole. Značky Struct vám umožňují upravit způsob Maršál zachází s polem, do kterého značka patří. Značky struct můžete použít k přejmenování pole ve výstupu JSON nebo je dokonce úplně vynechat. Strukturované značky (to Maršál rozpozná) začněte podřetězcem "json:".
Jako příklad řekněme, že máte strukturu Auto který představuje nějaké informace o autě. Zde je kód pro vytvoření a Auto a zařaďte to do JSON:
balík hlavní
import (
"kódování/json"
"fmt"
)
func hlavní(){
typ Konstrukce vozu {
Řetězec značky
Modelový řetězec
Cena int
}
val := Auto{Značka: "Mercedes", Modelka: "Benz", Cena: 50 000}
res, _ := json. maršál (val)
fmt.Println(tětiva(res))
}
Tento kód vytváří výstup:
The Značka, Modelka, a Cena pole Auto třeba začínat velkými písmeny, popř Maršál nebude možné je převést. Výsledkem je, že výstupní pole JSON začínají také velkými písmeny. Co když ale chcete, aby názvy v JSON začínaly malými písmeny, nebo pokud chcete pole úplně přejmenovat? To je místo, kde přicházejí na řadu značky struct. Zde je příklad:
balík hlavní
import (
"kódování/json"
"fmt"
)
func hlavní(){
typ Konstrukce vozu {
ID int `json:"-"`
Řetězec značky `json:"typ"`
Modelový řetězec `json:"Modelka"`
Cena int `json:"cena"`
}
val := Auto{ID: 0, Značka: "Mercedes", Modelka: "Benz", Cena: 50 000}
res, _ := json. maršál (val)
fmt.Println(tětiva(res))
}
Tento kód zavádí nové pole ID, které Maršál vynechá z výstupu JSON prostřednictvím značky struct. Kód také používá značky struct k přejmenování ostatních polí struct. Zde je výstup programu:
Jak vidíte, část značky struct následující za "json:" se stane názvem pole ve výstupu Marshala. Existuje jedna výjimka: pokud se jedná o řetězec "-", Marshal toto pole z výstupu vynechá. Více o značkách Marshal a struct si můžete přečíst v Přejít na dokumentaci.
Unmarshaling from JSON in Go
Balíček encoding/json poskytuje také funkci unmarshaling, tzv Unmaršál. Má následující podpis funkce:
func Unmarshal (data []byte, v rozhraní{}) chyba
Na rozdíl od Maršál, Unmaršál nevrací hodnotu. Místo toho přijímá JSON jako výsek bajtů v prvním argumentu a poté ukládá převedená data do objektu, na který ukazuje jeho druhý argument. Unmaršál funguje také se značkami struct, ale zde značky říkají Unmaršál která pole JSON odpovídají kterým polím struktur.
Při rozpojování v programu můžete načíst data z API, ale zde budete používat fiktivní data. Zde je návod, jak používáte Unmaršál:
balík hlavní
import (
"kódování/json"
"fmt"
)func hlavní(){
typ Konstrukce vozu {
ID int `json:"-"`
Řetězec značky `json:"typ"`
Modelový řetězec `json:"Modelka"`
Cena int `json:"cena"`
}jsonInput := `{
"typ": "Toyota",
"Modelka": "Camry",
"cena": 2000
}`var jsonOutput Car
chyba := json. Unmaršál([]byte(jsonInput), &jsonOutput)if err != nula {
fmt. Println("Chyba dekódování JSON!")
vrátit se
}
fmt.Println(jsonOutput)
}
Tento kód používá stejný typ Car jako předchozí příklad a rozbalí objekt JSON do struktury typu Car a poté vytiskne data ve struktuře. Po spuštění program vytvoří tento výstup:
To ukazuje, že fiktivní data JSON byla úspěšně uvolněna do souboru jsonOutput strukturovat.
Go usnadňuje práci s JSON
S balíčkem encoding/json je práce s JSON v Go stejně jednoduchá jako dvě volání funkcí: Marshaland Unmarshal. Go vám také umožňuje přizpůsobit proces zařazování/uvolňování JSON pomocí značek struct.
Převod dat do formátu JSON je skvělý způsob, jak je sdílet s jiným programem nebo procesem. Formát je tak univerzální, že JSON je tak přenosný, jak jen může být.