0Pricing
Go Academy · Lekcja

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

  1. Odczytywanie plików za pomocą os i bufio
  2. Zapisywanie plików i pliki tymczasowe
  3. Kodowanie i dekodowanie JSON
  4. Strumieniowe przetwarzanie JSON i CSV
← Powrót do Go Academy