0Pricing
Go Academy · Lekcja

Tagi JSON

Steruj marshalingiem

Tagi JSON to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 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.

Tagi JSON sterują serializacją

Pakiet encoding/json używa tagów json do określania nazw kluczy i reguł podczas konwertowania struktur na JSON i z JSON.

Domyślne nazwy pól

Bez tagów klucze JSON dokładnie odpowiadają nazwom eksportowanych pól, łącznie z wielkością liter.

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))
}

Zmiana nazw kluczy

Tag json zmienia nazwę klucza w wyniku. W tym przykładzie Name staje się nazwą zapisaną małymi literami.

package main

import (
	"encoding/json"
	"fmt"
)

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

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

Opcja omitempty

Dodanie ,omitempty pomija pole w wyniku, gdy ma ono wartość zerową (pusty napis, 0, nil itd.).

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name  string "json:\"name\""
	Email string "json:\"email,omitempty\""
}

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

Pomijanie pola

Tag - informuje koder o całkowitym pominięciu pola. Jest to przydatne w przypadku poufnych danych, takich jak hasła.

package main

import (
	"encoding/json"
	"fmt"
)

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

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

Deserializacja z użyciem tagów

Tagi działają w obu kierunkach. Podczas dekodowania JSON tag informuje dekoder, który klucz JSON ma wypełnić dane pole.

package main

import (
	"encoding/json"
	"fmt"
)

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

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

Dopasowanie bez uwzględniania wielkości liter

Podczas deserializacji Go awaryjnie dopasowuje klucze JSON do tagów bez uwzględniania wielkości liter. Mimo to jawne definiowanie tagów jest bezpiecznym i czytelnym rozwiązaniem.

Opcja string

Opcja ,string koduje pole liczbowe lub bool jako napis JSON. Jest przydatna w systemach, które wymagają liczb zapisanych w cudzysłowie.

package main

import (
	"encoding/json"
	"fmt"
)

type Item struct {
	ID int "json:\"id,string\""
}

func main() {
	b, _ := json.Marshal(Item{ID: 42})
	fmt.Println(string(b))
}

Łączenie opcji

Można połączyć nazwę z opcjami: json:"email,omitempty". Najpierw podaje się nazwę, a następnie opcje oddzielone przecinkami.

Pola nieeksportowane są pomijane

Serializowane są tylko pola eksportowane (zapisane wielką literą). Pole zapisane małą literą jest niewidoczne dla encoding/json, niezależnie od przypisanego tagu.

package main

import (
	"encoding/json"
	"fmt"
)

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

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

Czytelny wynik

json.MarshalIndent formatuje JSON z użyciem wcięć, co ułatwia czytanie logów, a jednocześnie nadal uwzględnia tagi.

package main

import (
	"encoding/json"
	"fmt"
)

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

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

Szybkie sprawdzenie

Co robi opcja ,omitempty w tagu json?

Podsumowanie

Tagi JSON sterują serializacją:

  • Zmieniają nazwy kluczy za pomocą json:"name"
  • ,omitempty pomija wartości zerowe
  • - ignoruje pole, a ,string zapisuje liczby jako tekst
  • Kodowane są tylko pola eksportowane

Często zadawane pytania

Czy lekcja „Tagi JSON” jest bezpłatna?

Tak — pełny tekst „Tagi 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 „Tagi JSON”?

Steruj marshalingiem Ć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 2 z 4.

Ile czasu zajmuje lekcja „Tagi 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. Czym są tagi struct
  2. Tagi JSON
  3. Biblioteki walidacji
  4. Własne analizowanie tagów
← Powrót do Go Academy