JSON (JavaScript Object Notation) to bardzo wszechstronny i niezwykle popularny format danych. Jest często używany do komunikacji między aplikacjami internetowymi, a także jako wygodny sposób przechowywania dużych ilości ustrukturyzowanych danych aplikacji.
JSON jest tak użyteczny, że prawie wszystkie współczesne języki programowania, w tym Go, mają wbudowane wsparcie dla pracy z nim.
Praca z JSON w Go
Większość pracy, którą wykonasz z formatem JSON, możesz podzielić na dwie ogólne kategorie: organizowanie i usuwanie. Wikipedii definiuje marshaling jako:
W informatyce organizowanie to proces przekształcania reprezentacji pamięci obiektu w format danych odpowiedni do przechowywania lub przesyłania. Jest zwykle używany, gdy dane muszą być przenoszone między różnymi częściami programu komputerowego lub z jednego programu do drugiego.
Mówiąc prościej, organizowanie to proces przekształcania danych przechowywanych w zmiennej w formę, która jest łatwiejsza do przekazania do innego programu. Unmarshaling to proces odwrotny: polega na pobraniu danych sformatowanych do transportu i przekonwertowaniu ich do postaci łatwiejszej w użyciu dla programu.
Używając Go, możesz kierować natywne struktury danych do formatu JSON. Możesz też wykonać akcję odwrotną, przekształcając dane JSON w zmienne Go.
Kierowanie do JSON w Go
Go zapewnia kodowanie/pakiet json aby ułatwić Ci pracę z JSON. Ten pakiet zawiera kilka funkcji, ale tą, której będziesz używać do organizowania, jest Marszałek funkcjonować. Marszałek ma następującą sygnaturę funkcji:
funk marszałek (w interfejs{}) ([]bajt, błąd)
To znaczy że Marszałek akceptuje parametr dowolnego typu danych i zwraca dwie wartości: wycinek bajtów i błąd. Innymi słowy dzwonisz Marszałek z wartością Go i konwertuje ją na JSON i zwraca odpowiednik JSON. Jeśli napotka błąd podczas procesu konwersji, zwróci błąd i pusty wycinek.
Oto przykład kodu, który używa Marszałek przekonwertować mapę na JSON. Aby uruchomić ten przykład, wystarczy utworzyć plik Go w Twój ulubiony edytor kodulub użyj Idź na plac zabaw:
pakiet główny
import (
"kodowanie/json"
"fmt"
)funkcja główny(){
wartość := mapa [łańcuch znaków]int{
"Jan": 25,
"Maryja": 19,
"adam": 5,
}
res, _ := json. marszałek (val)
fmt.Drukuj ln(strunowy(rez))
}
Jeśli uruchomisz ten kod, wyświetli się następujący komunikat:
Jak wspomniano wcześniej, możesz kierować dowolne dane Go do formatu JSON, chociaż w prawdziwym życiu zwykle będziesz organizować struktury. Z tego powodu Go udostępnia funkcję o nazwie struct tags, która umożliwia dawanie Marszałek dodatkowe instrukcje dotyczące konwersji struktur.
Znacznik struktury to ciąg, który umieszczasz w deklaracji struktury obok typu danych pola. Tagi strukturalne pozwalają dostosować sposób Marszałek traktuje pole, do którego należy znacznik. Możesz użyć tagów struct, aby zmienić nazwę pola w danych wyjściowych JSON, a nawet całkowicie je pominąć. Znaczniki strukturalne (tzw Marszałek rozpoznaje) zaczynają się od podłańcucha „json:”.
Jako przykład powiedzmy, że masz strukturę Samochód który reprezentuje pewne informacje o samochodzie. Oto kod do utworzenia pliku Samochód i skieruj go do JSON:
pakiet główny
import (
"kodowanie/json"
"fmt"
)
funkcja główny(){
typ Budowa samochodu {
Sznurek marki
Ciąg wzorcowy
Cena int
}
val := Samochód {Marka: "Mercedesa", Model: "benz", Cena: 50000}
res, _ := json. marszałek (val)
fmt.Drukuj ln(strunowy(rez))
}
Ten kod generuje dane wyjściowe:
The Marka, Model, I Cena pola Samochód muszą zaczynać się od wielkich liter, lub Marszałek nie będzie w stanie ich przekonwertować. Powoduje to, że pola wyjściowe JSON również zaczynają się od wielkich liter. Ale co, jeśli chcesz, aby nazwy zaczynały się małymi literami w JSON lub jeśli chcesz całkowicie zmienić nazwę pola? Właśnie tam pojawiają się znaczniki struct. Oto przykład:
pakiet główny
import (
"kodowanie/json"
"fmt"
)
funkcja główny(){
typ Budowa samochodu {
Identyfikator int `json:"-"`
Ciąg marki `json:"typ"`
Ciąg modelu `json:"Model"`
Cena int `json:"cena"`
}
val := Samochód{ID: 0, marka: "Mercedesa", Model: "benz", Cena: 50000}
res, _ := json. marszałek (val)
fmt.Drukuj ln(strunowy(rez))
}
Ten kod wprowadza nowe pole identyfikatora, które Marszałek pomija dane wyjściowe JSON za pomocą znacznika struct. Kod wykorzystuje również znaczniki struktury do zmiany nazw innych pól struktury. Oto wyjście programu:
Jak widać, część znacznika struct następująca po „json:” staje się nazwą pola w danych wyjściowych Marshala. Jest jeden wyjątek: jeśli jest to ciąg „-”, Marshal pomija to pole w danych wyjściowych. Możesz przeczytać więcej o znacznikach Marshal i struct w Przejdź do dokumentacji.
Unmarshaling z JSON w Go
Pakiet encoding/json zapewnia również funkcję unmarshaling, zwaną Niemarszałkowy. Ma następującą sygnaturę funkcji:
func Unmarshal (data []bajt, v interfejs{}) błąd
w odróżnieniu Marszałek, Niemarszałkowy nie zwraca wartości. Zamiast tego akceptuje JSON jako wycinek bajtów w pierwszym argumencie, a następnie przechowuje przekonwertowane dane w obiekcie wskazanym przez drugi argument. Niemarszałkowy działa również z tagami struct, ale tutaj tagi mówią Niemarszałkowy które pola JSON pasują do których pól struktury.
Podczas unmarshaling w programie, możesz pobrać dane z API, ale tutaj będziesz używać fikcyjnych danych. Oto jak używasz Niemarszałkowy:
pakiet główny
import (
"kodowanie/json"
"fmt"
)funkcja główny(){
typ Budowa samochodu {
Identyfikator int `json:"-"`
Ciąg marki `json:"typ"`
Ciąg modelu `json:"Model"`
Cena int `json:"cena"`
}jsonInput := `{
"typ": "Toyota",
"Model": "Camry",
"cena": 2000
}`rozm jsonWyjście samochodu
błąd:= json. Niemarszałek([]bajt(jsonInput), &jsonOutput)jeśli błąd!= zero {
fmt. println("Błąd dekodowania JSON!")
powrót
}
fmt.Drukuj ln(jsonWyjście)
}
Ten kod używa tego samego typu Car, co w poprzednim przykładzie, i usuwa obiekt JSON do struktury typu Car, a następnie drukuje dane w strukturze. Po uruchomieniu program generuje następujące dane wyjściowe:
To pokazuje, że fikcyjne dane JSON zostały pomyślnie przekazane do pliku jsonWyjście struktura.
Go ułatwia pracę z formatem JSON
Dzięki pakietowi encoding/json praca z JSON w Go jest tak prosta, jak dwa wywołania funkcji: Marshaland Unmarshal. Go pozwala także dostosować proces organizowania/usuwania formatu JSON za pomocą znaczników struktury.
Konwersja danych do formatu JSON to świetny sposób na udostępnianie ich innemu programowi lub procesowi. Format jest tak uniwersalny, że JSON jest tak przenośny, jak to tylko możliwe.