JSON na strukturę Go

Dalej

Wklej przykładowy JSON i otrzymaj definicje struktur Go, które czysto go parsują za pomocą encoding/json. Pola są eksportowane (CamelCase), oznaczone oryginalnymi kluczami JSON, zamieniane na wskaźniki, gdy wartość może być null, a obiekty zagnieżdżone otrzymują własne nazwane deklaracje struktur.

Jak przekonwertować JSON na strukturę Go

  1. 1

    Wklej JSON

    Jedna próbka wystarczy. Więcej próbek poprawia wnioskowanie o polach nullowalnych.

  2. 2

    Wybierz nazewnictwo

    Dla pól eksportowanych konwencją Go jest PascalCase. Wybierz styl skrótów (`URL` vs `Url`, `ID` vs `Id`).

  3. 3

    Wybierz strategię dla pól opcjonalnych

    Użyj wskaźników dla pól nullowalnych (najbardziej idiomatyczne) lub tagów `omitempty`.

  4. 4

    Skopiuj struktury

    Jedna struktura główna wraz z zagnieżdżonymi. Wklej ją do pliku `.go` i uruchom `go build`.

Przykładowy wynik

Dla:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Wynik:

type User struct {
    FirstName string   `json:"first_name"`
    Age       int      `json:"age"`
    Email     *string  `json:"email"`
    Tags      []string `json:"tags"`
}

Mapowanie typów

Wartość JSON Typ Go
ciąg znaków string
liczba całkowita int lub int64
liczba (dziesiętna) float64
wartość logiczna bool
null (gdy obok jest element niepusty) *T (wskaźnik)
tablica []T
obiekt Nazwana struktura
tablica mieszana []interface{}

Konwencje nazewnicze stosowane przez generator

  • Inicjały pisane wielkimi literami: idID, urlURL, api_keyAPIKey. Odpowiada to zalecanemu stylowi Go (oraz regułom go vet / staticcheck).
  • JSON w formacie snake_case → pola PascalCase: first_nameFirstName.
  • Jednowyrazowe akronimy zachowane: IP pozostaje IP, HTTP pozostaje HTTP.
  • Tag JSON: json:"first_name" zachowuje oryginalny klucz, dzięki czemu kodowanie działa bez strat.

Pola opcjonalne: wskaźnik czy omitempty?

Strategia Kiedy stosować
Wskaźnik (*T) Musisz odróżnić „brak“ od „wartości zerowej“
omitempty Chcesz tylko pomijać wartości zerowe przy marshalingu; przy unmarshalingu brakujące pola dostają zero
Żadne Pole jest zawsze obecne, a wartości zerowe mają znaczenie

Generator domyślnie stosuje wskaźnik + omitempty dla wszystkiego, co uznane za null; dostosuj to do własnej semantyki.

Najczęstsze błędy

  • Użycie int, gdy liczba całkowita z JSON przekracza MaxInt32 na platformie 32-bitowej. Dla znanych dużych wartości używaj int64.
  • Ponowne kodowanie i utrata kolejności kluczy. encoding/json wypisuje klucze w kolejności deklaracji pól, a nie w oryginalnej kolejności JSON. Jeśli potrzebujesz wyniku kanonicznego, posortuj je ręcznie.
  • Tablice o mieszanym kształcie. []interface{} traci bezpieczeństwo typów. Rozważ zamiast tego typy sumy z polem dyskryminatora type.
  • Zapomnienie o omitempty przy polach opcjonalnych. Bez niego pola opcjonalne są serializowane jako "foo": null, a nie pomijane.

Najczęściej zadawane pytania

Używaj wskaźników, gdy musisz odróżnić „pole nieobecne“ od „pole równe zero“. Używaj omitempty, gdy wartość zerowa nie jest dopuszczalną wartością biznesową ("", 0, false zawsze oznaczają „pomiń to“). Wiele zespołów wybiera jedno podejście i stosuje je konsekwentnie w całej bazie kodu.

Każdy zagnieżdżony obiekt staje się osobną nazwaną deklaracją struktury (np. UserAddress). Typy są wstawiane w linii tylko wtedy, gdy zagnieżdżona struktura jest bardzo mała i użyta raz; w przeciwnym razie otrzymujesz czyste, wielokrotnego użytku typy.

Tak. id staje się ID, url staje się URL, api_key staje się APIKey. Tego oczekuje go vet i to zalecają najczęściej przewodniki po stylu Go.

Generator wypisuje zwykłe struktury ze standardowymi tagami json:. Niestandardowe implementacje UnmarshalJSON (np. dla dat w formatach spoza ISO) dodaj ręcznie po wygenerowaniu.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach