A JSON (JavaScript Object Notation) egy rendkívül sokoldalú és rendkívül népszerű adatformátum. Gyakran használják a webalkalmazások közötti kommunikációra, valamint kényelmes módja a nagy mennyiségű strukturált alkalmazásadat tárolásának.

A JSON annyira hasznos, hogy szinte minden modern programozási nyelv beépített támogatást nyújt a vele való munkához, beleértve a Go-t is.

JSON használata a Go-ban

A JSON-nal végzett munka nagy részét két általános kategóriára oszthatja: felosztásra és szétválasztásra. Wikipédia a rendezést a következőképpen határozza meg:

Az informatikában a felosztás az a folyamat, amelynek során egy objektum memóriareprezentációját tárolásra vagy átvitelre alkalmas adatformátummá alakítják. Általában akkor használatos, amikor adatokat kell mozgatni egy számítógépes program különböző részei között vagy egyik programból a másikba.

Egyszerűbben fogalmazva, a sorba rendezés az a folyamat, amikor egy változóban tárolt adatokat egy másik programnak könnyebben átadható formává alakítják. A szétválasztás fordított folyamat: a szállításhoz formázott adatok felvételét és a program által könnyebben használható űrlapra való konvertálását jelenti.

instagram viewer

A Go használatával a natív adatstruktúrákat JSON-ba rendezheti. És végrehajthatja a fordított műveletet is, megszüntetve a JSON-adatokat Go változókká.

Átrendezés JSON-ra a Go-ban

Go biztosítja a kódolás/json csomag hogy megkönnyítse a JSON-nal való munkát. Ez a csomag több funkciót is tartalmaz, de a rendezéshez az a Marsall funkció. Marsall a következő funkció aláírással rendelkezik:

func marsall (v felület{}) ([]byte, hiba)

Ez azt jelenti Marsall bármilyen adattípus paraméterét elfogadja, és két értéket ad vissza: egy bájtszeletet és egy hibát. Más szóval, hívsz Marsall egy Go értékkel, és átalakítja azt JSON-ba, és visszaadja a JSON megfelelőjét. Ha hibát észlel az átalakítási folyamat során, akkor a hibát és egy üres szeletet küld vissza.

Itt van egy kódpélda, amely használja Marsall egy térkép JSON formátumba konvertálásához. A példa futtatásához csak egy Go fájlt kell létrehoznia kedvenc kódszerkesztőd, vagy használja a Menj játszótérre:

csomag fő-

import (
"kódolás/json"
"fmt"
)

func fő-(){
val := térkép[karakterlánc]int{
"János": 25,
"Mária": 19,
"Ádám": 5,
}

res, _ := json. marsall (val)
fmt.Println(húr(res))
}

Ha ezt a kódot lefuttatja, a következőt fogja kiadni:

Ahogy korábban említettük, bármilyen típusú Go-adatot átrendelhet JSON-ba, bár a való életben általában struktúrákat kell rendeznie. Emiatt a Go egy struct tags nevű szolgáltatást biztosít, amely lehetővé teszi az adást Marsall extra utasítások a struktúrák konvertálásához.

A struct címke egy karakterlánc, amelyet a struct deklarációban a mező adattípusa mellett kell megadni. A szerkezeti címkék segítségével módosíthatja az utat Marsall azt a mezőt kezeli, amelyhez a címke tartozik. A struct címkék segítségével átnevezhet egy mezőt a JSON-kimenetben, vagy akár teljesen elhagyhatja. Címkék szerkezete (az Marsall felismeri) kezdje a „json:” részkarakterlánccal.

Tegyük fel például, hogy van egy struktúrája Autó amely bizonyos információkat jelent egy autóról. Itt van a kód létrehozásához a Autó és továbbítsa a JSON-nak:

csomag fő-

import (
"kódolás/json"
"fmt"
)

func fő-(){
típus autó szerkezet {
Márkafüzér
Modell karakterlánc
Ár int
}
val := Autó{Márka: "Mercedes", Modell: "Benz", Ár: 50000}
res, _ := json. marsall (val)
fmt.Println(húr(res))
}

Ez a kód a következő kimenetet állítja elő:

A Márka, Modell, és Ár mezői Autó nagybetűkkel kell kezdeni, vagy Marsall nem tudja átalakítani őket. Ennek eredményeként a JSON kimeneti mezők is nagybetűkkel kezdődnek. De mi van akkor, ha azt szeretné, hogy a nevek kisbetűkkel kezdődjenek a JSON-ban, vagy ha egy mezőt teljesen át szeretne nevezni? Itt jönnek be a struct címkék. Íme egy példa:

csomag fő-
import (
"kódolás/json"
"fmt"
)
func fő-(){
típus autó szerkezet {
ID int `json:"-"`
json márkakarakterlánc:"típus"`
Modellkarakterlánc `json:"modell"`
Ár int `json:"ár"`
}
val := Autó{azonosító: 0, Márka: "Mercedes", Modell: "Benz", Ár: 50000}
res, _ := json. marsall (val)
fmt.Println(húr(res))
}

Ez a kód egy új azonosító mezőt vezet be, amely Marsall kihagyja a JSON-kimenetet egy struct címkén keresztül. A kód struct címkéket is használ a többi struct mező átnevezéséhez. Íme a program kimenete:

Amint láthatja, a struct címke "json:" utáni része lesz a mező neve a Marshal kimenetében. Van egy kivétel: ha ez a "-" karakterlánc, akkor a Marshal kihagyja ezt a mezőt a kimenetből. A Marshal és a struct címkékről bővebben itt olvashat Menj a dokumentációhoz.

Leválasztás a JSON-ból a Go-ban

Az encoding/json csomag egy unmarshaling funkciót is biztosít, az úgynevezett Unmarsall. A következő funkció aláírással rendelkezik:

func Unmarshal (adat []byte, v felület{}) hiba

nem úgy mint Marsall, Unmarsall nem ad vissza értéket. Ehelyett elfogadja a JSON-t bájtok szeletként az első argumentumban, majd a konvertált adatokat a második argumentum által mutatott objektumban tárolja. Unmarsall működik a struct címkékkel is, de itt a címkék mondják el Unmarsall mely JSON-mezők melyik struct-mezőknek felelnek meg.

Amikor megszünteti a rendezést egy programban, előfordulhat adatok lekérése egy API-ból, de itt áladatokat fog használni. Íme, hogyan használja Unmarsall:

csomag fő-

import (
"kódolás/json"
"fmt"
)

func fő-(){
típus autó szerkezet {
ID int `json:"-"`
json márkakarakterlánc:"típus"`
Modellkarakterlánc `json:"modell"`
Ár int `json:"ár"`
}

jsonInput := `{
"típus": "Toyota",
"modell": "Camry",
"ár": 2000
}`

var jsonOutput Car
hiba := json. Unmarshal([]byte(jsonInput), &jsonOutput)

if err != nil {
fmt. Println("JSON dekódolási hiba!")
Visszatérés
}

fmt.Println(jsonOutput)
}

Ez a kód ugyanazt az autótípust használja, mint az előző példa, és egy JSON-objektumot egy Car típusú struktúrába rendez, majd kinyomtatja a struktúra adatait. Futtatásakor a program ezt a kimenetet adja:

Ez azt mutatja, hogy az ál-JSON-adatok sikeresen feloldásra kerültek a jsonOutput struct.

A Go megkönnyíti a JSON-val való munkát

A kódolás/json csomaggal a JSON-nal való munkavégzés a Go alkalmazásban olyan egyszerű, mint két függvényhívás: Marshaland Unmarshal. A Go azt is lehetővé teszi, hogy testreszabja a JSON rendezésének/feloldásának folyamatát struct címkékkel.

Az adatok JSON-ba konvertálása nagyszerű módja annak, hogy megosszák azokat egy másik programmal vagy folyamattal. A formátum annyira univerzális, hogy a JSON a lehető legjobban hordozható.