JSON (JavaScript Object Notation) este un format de date extrem de versatil și foarte popular. Este adesea folosit pentru comunicarea între aplicațiile web și, de asemenea, ca o modalitate convenabilă de a stoca cantități mari de date structurate ale aplicațiilor.
JSON este atât de util încât aproape toate limbajele de programare moderne oferă suport încorporat pentru lucrul cu acesta, inclusiv Go.
Lucrul cu JSON în Go
Puteți împărți cea mai mare parte a muncii pe care o veți face cu JSON în două categorii generale: marshaling și unmarshaling. Wikipedia definește marshaling ca:
În informatică, marshaling-ul este procesul de transformare a reprezentării de memorie a unui obiect într-un format de date adecvat pentru stocare sau transmitere. Este de obicei folosit atunci când datele trebuie mutate între diferite părți ale unui program de calculator sau de la un program la altul.
În termeni mai simpli, marshaling-ul este procesul de conversie a datelor stocate într-o variabilă într-o formă care este mai ușor de transmis unui alt program. Unmarshaling este procesul invers: implică preluarea datelor formatate pentru transport și convertirea lor într-un formular care este mai ușor de utilizat pentru programul dvs.
Folosind Go, puteți distribui structuri de date native în JSON. Și puteți efectua acțiunea inversă, dezordonând datele JSON în variabile Go.
Marshaling la JSON în Go
Go oferă pachet de codificare/json pentru a vă facilita lucrul cu JSON. Acest pachet conține mai multe funcții, dar cea pe care o veți folosi pentru marshaling este Mareșal funcţie. Mareșal are următoarea semnătură de funcție:
func Mareșal (v interfata{}) ([]octet, eroare)
Aceasta înseamnă că Mareșal acceptă un parametru de orice tip de date și returnează două valori: o porțiune de octeți și o eroare. Cu alte cuvinte, suni Mareșal cu o valoare Go și o convertește în JSON și returnează echivalentul JSON. Dacă întâmpină o eroare în timpul procesului de conversie, va returna eroarea și o porțiune goală.
Iată un exemplu de cod care folosește Mareșal pentru a converti o hartă în JSON. Pentru a rula acest exemplu, tot ce aveți nevoie este să creați un fișier Go în editorul tău de cod preferat, sau utilizați Du-te la loc de joacă:
pachet principal
import (
"codificare/json"
"fmt"
)func principal(){
val := hartă[șir]int{
"Ioan": 25,
"maria": 19,
"Adam": 5,
}
res, _ := json. Mareșal (val)
fmt.Println(şir(res))
}
Dacă rulați acel cod, va afișa următoarele:
După cum s-a menționat anterior, puteți distribui orice tip de date Go la JSON, deși în viața reală veți de obicei să distribuiți structuri. Din acest motiv, Go oferă o caracteristică numită etichete struct pentru a vă permite să oferiți Mareșal instrucțiuni suplimentare pentru conversia structurilor dvs.
O etichetă struct este un șir pe care îl includeți în declarația dvs. de struct lângă tipul de date al unui câmp. Etichetele Struct vă permit să ajustați modul Mareșal tratează câmpul căruia îi aparține eticheta. Puteți folosi etichete struct pentru a redenumi un câmp din ieșirea JSON sau chiar să îl omiteți în întregime. Etichete Struct (care Mareșal recunoaște) începe cu subșirul „json:”.
De exemplu, să presupunem că aveți o structură Mașină care reprezintă unele informații despre o mașină. Iată codul pentru a crea un Mașină și trimiteți-l la JSON:
pachet principal
import (
"codificare/json"
"fmt"
)
func principal(){
tip Car struct {
Snur de marcă
Model sfoară
Preț int
}
val := Car{Brand: "Mercedes", Model: "Benz", Preț: 50000}
res, _ := json. Mareșal (val)
fmt.Println(şir(res))
}
Acest cod produce rezultatul:
The Marca, Model, și Preț domenii de Mașină trebuie să înceapă cu litere mari sau Mareșal nu le va putea converti. Astfel, câmpurile de ieșire JSON încep și cu majuscule. Dar ce se întâmplă dacă doriți ca numele să înceapă cu litere mici în JSON sau dacă doriți să redenumiți complet un câmp? Aici intervin etichetele struct. Iată un exemplu:
pachet principal
import (
"codificare/json"
"fmt"
)
func principal(){
tip Car struct {
ID int `json:"-"`
Șirul de marcă `json:"tip"`
șir de model `json:"model"`
Preț int `json:"Preț"`
}
val := Auto{ID: 0, Brand: "Mercedes", Model: "Benz", Preț: 50000}
res, _ := json. Mareșal (val)
fmt.Println(şir(res))
}
Acest cod introduce un nou câmp ID care Mareșal omite din ieșirea JSON printr-o etichetă struct. Codul folosește, de asemenea, etichete struct pentru a redenumi celelalte câmpuri struct. Iată rezultatul programului:
După cum puteți vedea, partea etichetei struct care urmează „json:” devine numele câmpului din rezultatul lui Marshal. Există o excepție: dacă este șirul „-”, Marshal omite acel câmp din ieșire. Puteți citi mai multe despre etichetele Marshal și struct în Du-te la documentare.
Demarshaling din JSON în Go
Pachetul codificare/json oferă și o funcție de demaraj, numită Unmarshal. Are următoarea semnătură de funcție:
func Unmarshal (data []byte, v interfata{}) eroare
Spre deosebire de Mareșal, Unmarshal nu returnează o valoare. În schimb, acceptă JSON ca o porțiune de octeți în primul argument și apoi stochează datele convertite în obiectul la care indică al doilea argument. Unmarshal funcționează și cu etichete struct, dar aici, etichetele spun Unmarshal care câmpuri JSON se potrivesc cu ce câmpuri struct.
Atunci când demarshaling într-un program, s-ar putea preluați date dintr-un API, dar aici veți folosi date fictive. Iată cum folosești Unmarshal:
pachet principal
import (
"codificare/json"
"fmt"
)func principal(){
tip Car struct {
ID int `json:"-"`
Șirul de marcă `json:"tip"`
șir de model `json:"model"`
Preț int `json:"Preț"`
}jsonInput := `{
"tip": "Toyota",
"model": "Camry",
"Preț": 2000
}`var jsonOutput Car
err := json. Unmarshal([]octet(jsonInput), &jsonOutput)daca greseste != nil {
fmt. Println("Eroare de decodare JSON!")
întoarcere
}
fmt.Println(jsonOutput)
}
Acest cod folosește același tip de mașină ca exemplul anterior și dezactivează un obiect JSON într-o structură de tip Car, apoi tipărește datele în structură. Când este rulat, programul produce această ieșire:
Acest lucru arată că datele JSON false au fost eliminate cu succes în jsonOutput struct.
Go facilitează lucrul cu JSON
Cu pachetul de codificare/json, lucrul cu JSON în Go este la fel de simplu ca două apeluri de funcție: Marshaland Unmarshal. Go vă permite, de asemenea, să personalizați procesul de marshaling/unmarshaling JSON cu etichete struct.
Convertirea datelor în JSON este o modalitate excelentă de a le partaja cu un alt program sau proces. Formatul este atât de universal încât JSON este cât se poate de portabil.