Kodowanie i dekodowanie JSON
Marshal, Unmarshal i tagi struktur
Kodowanie i dekodowanie JSON to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Omówienie encoding/json
Pakiet Go encoding/json koduje wartości Go do formatu JSON i dekoduje JSON z powrotem do wartości Go, używając tagów struktur oraz refleksji.
json.Marshal
json.Marshal konwertuje wartość Go na bajty JSON. Zwraca błąd w przypadku nieobsługiwanych typów (kanałów, funkcji i liczb zespolonych).
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
u := User{Name: "Alice", Age: 30}
data, err := json.Marshal(u)
fmt.Println(string(data)) // {"name":"Alice","age":30}json.Unmarshal
json.Unmarshal dekoduje JSON do wartości Go. Wartość docelowa musi być wskaźnikiem.
var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"Tagi struktur
Tagi struktur json: służą do kontrolowania nazw pól, pomijania pustych wartości i pomijania pól nieeksportowanych.
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,omitempty"` // omit if zero
secret string // unexported: ignored
}json.Encoder / json.Decoder
W przypadku strumieniowania, np. ciał odpowiedzi i żądań HTTP, należy używać Encoder i Decoder zamiast Marshal/Unmarshal, aby uniknąć wczytywania całego ładunku do pamięci.
// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)Dekodowanie do map[string]any
Nieznany JSON można zdekodować do ogólnej mapy:
var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])json.Number
Domyślnie liczby w ogólnych mapach są dekodowane jako float64. Należy użyć decoder.UseNumber(), aby dekodować je jako json.Number z zachowaniem precyzji.
dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)Niestandardowe kodowanie
Należy zaimplementować json.Marshaler lub json.Unmarshaler, aby kontrolować kodowanie i dekodowanie danego typu, np. w przypadku niestandardowych formatów dat.
func (d Date) MarshalJSON() ([]byte, error) {
return json.Marshal(d.Format("2006-01-02"))
}Pomijanie pól
Użyj omitempty, aby pomijać wartości zerowe. Użyj json:"-", aby zawsze wykluczać pole z danych wyjściowych JSON, niezależnie od jego wartości.
Hidden string `json:"-"`Obsługa null
Wartość JSON null jest dekodowana do zerowej wartości Go dla typów skalarnych albo ustawia wskaźnik na nil. Wskaźnik nil jest kodowany jako null.
Formatowanie z wcięciami
Do uzyskania czytelnych dla człowieka danych wyjściowych należy użyć json.MarshalIndent:
data, _ := json.MarshalIndent(u, "", " ")Szybkie sprawdzenie
Co robi tag struktury `json:"name,omitempty"`?
Podsumowanie: kodowanie i dekodowanie JSON
Najważniejsze informacje:
- json.Marshal/Unmarshal służą do danych w pamięci, a Encoder/Decoder do strumieni
- Tagi struktur kontrolują nazwy, omitempty i wykluczanie pól
- Niestandardowe typy implementują Marshaler/Unmarshaler
- Do danych wyjściowych przeznaczonych do debugowania należy używać json.MarshalIndent
Często zadawane pytania
Czy lekcja „Kodowanie i dekodowanie JSON” jest bezpłatna?
Tak — pełny tekst „Kodowanie i dekodowanie JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kodowanie i dekodowanie JSON”?
Marshal, Unmarshal i tagi struktur Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Kodowanie i dekodowanie JSON”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Odczytywanie plików za pomocą os i bufio
- Zapisywanie plików i pliki tymczasowe
- Kodowanie i dekodowanie JSON
- Strumieniowe przetwarzanie JSON i CSV