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.Marshalprzekształca wartości Go w JSONjson.Unmarshalanalizuje 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
- Powtórka encoding/json
- encoding/xml
- encoding/csv
- gob i kodowanie binarne