0Pricing
Go Academy · Lekcja

Powtórka encoding/json

Wykonuj marshalowanie i unmarshalowanie JSON

Powtórka encoding/json to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 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.

JSON w Go

JSON to najczęściej używany format danych dla interfejsów API. Standardowy pakiet Go encoding/json konwertuje wartości Go na tekst JSON i odwrotnie.

Marshal: z Go do JSON

json.Marshal przekształca wartość Go w slice bajtów JSON. Aby ją wyświetlić, należy przekonwertować ją na string.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1, "b": 2}
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

Serializowanie struktury

Struktury są serializowane pole po polu. Pola eksportowane stają się kluczami JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Unmarshal: z JSON do Go

json.Unmarshal analizuje bajty JSON i zapisuje wynik do wartości Go. Należy przekazać wskaźnik, aby metoda mogła wypełnić zmienną.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
	fmt.Println(u)
}

Tagi określające nazwy kluczy

Tagi json służą do kontrolowania nazw kluczy, jak omówiono wcześniej. W tym przypadku Name jest mapowane na nazwę klucza JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

Zawsze sprawdzaj błędy

Zarówno Marshal, jak i Unmarshal zwracają błąd. W prawdziwym kodzie nigdy nie należy go ignorować; nieprawidłowy JSON lub nieobsługiwane typy powodują błędy.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v int
	err := json.Unmarshal([]byte("not json"), &v)
	fmt.Println(err)
}

Dekodowanie do map

Gdy z góry nie wiadomo, jaki będzie kształt danych, należy przeprowadzić unmarshaling do map[string]interface{}.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var m map[string]interface{}
	json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
	fmt.Println(m["x"], m["y"])
}

Slice'y i tablice

Tablice JSON odpowiadają slice'om Go. Serializacja slice'a daje tablicę JSON.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	b, _ := json.Marshal([]string{"a", "b", "c"})
	fmt.Println(string(b))
}

Formatowanie z wcięciami

json.MarshalIndent dodaje wcięcia, aby wynik był czytelny dla człowieka.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1}
	b, _ := json.MarshalIndent(data, "", "  ")
	fmt.Println(string(b))
}

Liczby to float64

Podczas dekodowania do interface{} wszystkie liczby JSON stają się w Go wartościami typu float64. Jeśli potrzebny jest typ int, należy wykonać jawną konwersję.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v interface{}
	json.Unmarshal([]byte("42"), &v)
	fmt.Printf("%T %v\n", v, v)
}

Pełny cykl

Można przeprowadzić serializację, a następnie deserializację, aby skopiować dane za pośrednictwem JSON. Wartości pozostaną niezmienione dla obsługiwanych typów.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	orig := []int{1, 2, 3}
	b, _ := json.Marshal(orig)
	var back []int
	json.Unmarshal(b, &back)
	fmt.Println(back)
}

Szybkie sprawdzenie

Dlaczego do json.Unmarshal należy przekazać wskaźnik?

Podsumowanie

encoding/json:

  • json.Marshal przekształca wartości Go w JSON
  • json.Unmarshal analizuje JSON i zapisuje wynik pod adresem wskazywanym przez wskaźnik
  • Tagi zmieniają nazwy kluczy, a liczby dekodowane do interface{} mają typ float64
  • Zawsze należy sprawdzać zwrócony błąd

Często zadawane pytania

Czy lekcja „Powtórka encoding/json” jest bezpłatna?

Tak — pełny tekst „Powtórka encoding/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 „Powtórka encoding/json”?

Wykonuj marshalowanie i unmarshalowanie JSON Ć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 1 z 4.

Ile czasu zajmuje lekcja „Powtórka encoding/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. Powtórka encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob i kodowanie binarne
← Powrót do Go Academy