logo
GeekFormat

JSON na Go

Wklej JSON po lewej, a definicje typów struct Go gotowe do bezpośredniego użycia w projektach Go zostaną automatycznie wygenerowane po prawej. Czysto lokalne przetwarzanie w przeglądarce, nie wymaga rejestracji ani wysyłania.

Powiązane Rekomendacje

O JSON na Go: Przekształcanie JSON w silnie typowaną struct Go

JSON na Go to proces automatycznej konwersji danych w formacie JSON na definicje typów struct języka Go. JSON jest najpopularniejszym formatem wymiany danych w REST API, plikach konfiguracyjnych, kolejkach wiadomości i dziennikach, podczas gdy Go jest silnie typowanym językiem; podczas programowania dynamiczna struktura JSON często musi być mapowana na struct przed deserializacją z encoding/json. Ręczne pisanie struct, szczególnie zagnieżdżonych obiektów, łatwo prowadzi do pominiętych pól lub błędnych typów; to narzędzie ma na celu automatyzację powtarzalnej pracy.

Struct w Go to złożony typ danych, deklarowany jako `type Name struct { ... }`. Każde pole składa się z nazwy i typu; nazwy pól muszą zaczynać się od wielkiej litery, aby były dostępne z innych pakietów, tzw. „eksportowane identyfikatory”. Narzędzie automatycznie konwertuje nazwy pól JSON na eksportowane nazwy pól w PascalCase, np. `user_name` mapuje się na `UserName`, z oryginalnym kluczem zachowanym w tagu json.

Główna konwersja tego narzędzia jest wykonywana przez wbudowany w przeglądarkę Web Worker jsonFormat, który wywołuje renderer Go quicktype-core z opcjami `just-types` i `no-comments`. Cały proces nie zależy od usług backendowych: wprowadzony JSON jest parsowany lokalnie, typy są wnioskowane, kod Go jest generowany, a na koniec prezentowany w prawym edytorze.

Wnioskowanie typów jest zgodne z konwencjonalnym mapowaniem JSON na Go: ciągi mapowane są na `string`, wartości logiczne na `bool`, liczby całkowite na `int64`, liczby zmiennoprzecinkowe na `float64`, tablice na wycinki `[]T`, obiekty na niezależne struktury, `null` na `interface{}`. Zagnieżdżone obiekty są przetwarzane rekurencyjnie, utrzymując przejrzystą hierarchię.

W porównaniu do ręcznego pisania, kod wygenerowany przez narzędzie to „działająca pierwsza wersja robocza”. Deweloperzy zazwyczaj muszą tylko dostosować nazwę typu głównego, nazwę pakietu, precyzję typów pól (np. int64 na int) i czy używać typów wskaźnikowych, zanim umieszczą w rzeczywistych projektach Go. W połączeniu z kopiowaniem jednym kliknięciem i pobieraniem model.go powtarzalna praca na etapach integracji i modelowania jest znacznie zmniejszona.

Przypadki użycia

  • Rozwój backendu w Go konwertuje JSON odpowiedzi REST API na struct, bezpośrednio wiąże z parametrami handlera Gin/Echo/Fiber przez json.Unmarshal
  • Podczas integracji frontend-backend pobiera przykładowy JSON odpowiedzi z Postmana, szybko generuje model Go, aby zmniejszyć ręczne wpisywanie pól
  • Podczas integracji zewnętrznych wywołań zwrotnych Webhook konwertuje JSON payload na struct Go dla wygodnego dostępu i walidacji na poziomie pól
  • Konwertuje pliki konfiguracyjne JSON z Viper/Consul/Nacos na typy Go, zastępując słabotypowany dostęp map[string]interface{}
  • Zespoły mikrousług ujednolicają strukturę żądań/odpowiedzi dla interfejsów gRPC/HTTP, konwertują przykładowy JSON na współdzielone typy Go
  • Inżynierowie testów konwertują JSON fixture na struct Go, używają z testify do testów opartych na asercjach
  • DevOps analizują wiersze dzienników JSON zebrane przez ELK/Fluentd, generują struct do strukturalnej analizy za pomocą programów w Go
  • Po tym, jak crawlery pobiorą dane JSON, konwertują na struct Go, współpracują z gorm/gen lub ent do generowania modeli baz danych
  • Dane telemetryczne JSON zgłaszane przez urządzenia IoT konwertowane są na struct Go, deserializacja i filtrowanie w programach brzegowych
  • Konwertuje wiadomości JSON konsumowane z Kafka/NATS/RabbitMQ na typy Go do implementacji konsumentów sterowanych zdarzeniami
  • Deweloperzy SDK konwertują przykładowy JSON odpowiedzi serwera na struct Go, zapisują w pakiecie types biblioteki klienta do wglądu użytkowników
  • Konwertuje przykładowy JSON z dokumentacji Swagger/OpenAPI na struct Go jako przykłady kodu dokumentacji interfejsu
  • Studenci lub wykładowcy konwertują przykładowy JSON na struct podczas kursów Go, demonstrują system typów Go i użycie tagów json
  • Skrypty migracji danych konwertują wiersze JSON wyeksportowane z MySQL/PostgreSQL na struct Go do mapowania pól i walidacji typów
  • JSON konfiguracji CI/CD konwertuje się na struct Go, wygodne do silnie typowanego odczytu konfiguracji w narzędziach potoków napisanych w Go
  • Stare projekty refaktoryzują dynamiczny kod odczytu JSON oparty na map na silnie typowany dostęp oparty na struct

Jak Używać

  1. Wklej zawartość JSON w lewym edytorze, lub przeciągnij i upuść pliki .json/.txt, lub kliknij „Przykład”, aby załadować wbudowane dane.
  2. Poczekaj około 400ms, narzędzie automatycznie przekonwertuje i wyświetli wygenerowany kod struct Go po prawej.
  3. Jeśli JSON ma błędy, kliknij przycisk „Napraw JSON”, aby automatycznie naprawić typowe błędy formatowania, a następnie kontynuuj generowanie.
  4. Sprawdź prawy wynik, kliknij „Kopiuj”, aby wkleić do projektu Go, lub kliknij „Pobierz”, aby zapisać jako plik model.go.

Funkcje

  • Lokalne generowanie struct Go w przeglądarce: Parsowanie JSON i generowanie kodu Go odbywa się w przeglądarce, surowe dane nie są wysyłane na serwer
  • Automatyczna konwersja z debouncingiem 400ms: Nie trzeba ręcznie klikać po wklejeniu lub modyfikacji, kopiowalny kod Go jest wyświetlany w czasie rzeczywistym po prawej
  • Inteligentne wnioskowanie typów: ciągi mapowane na string, wartości logiczne na bool, liczby całkowite na int64, liczby zmiennoprzecinkowe na float64, tablice na wycinki, obiekty na struktury
  • Automatyczne rozwijanie zagnieżdżonych obiektów: Rekurencyjnie generuje niezależne typy struct, utrzymując przejrzystą hierarchię JSON
  • Automatycznie generowane tagi json: Pola mają tagi `json:"oryginalna_nazwa_pola"`, gotowe do użycia z encoding/json
  • Naprawa błędów JSON jednym kliknięciem: Automatycznie obsługuje końcowe przecinki, pojedyncze cudzysłowy, brakujące cudzysłowy i inne typowe błędy formatowania, kontynuuje generowanie po naprawie
  • Obsługa wprowadzania przez wklejanie/wgrywanie/przykład: Przeciągnij i upuść pliki .json/.txt lub wbuduj przykłady
  • Kopiowanie i pobieranie jednym kliknięciem: Kopiuj cały kod Go do schowka lub pobierz jako plik model.go bezpośrednio do projektu
  • Historia wprowadzania localStorage: Automatycznie zapisuje ostatnie wprowadzenia, szybkie odzyskiwanie po odświeżeniu lub przypadkowym zamknięciu strony
  • Responsywny edytor z podzielonym ekranem: Regulowana szerokość lewej/prawej panelu, wygodne wyświetlanie wejścia/wyjścia na komputerach stacjonarnych i urządzeniach mobilnych

Przykłady kodu

Deserializacja JSON z wygenerowaną struct

go

Po skopiowaniu wygenerowanej struct do projektu bezpośrednio zdeserializuj odpowiedź API za pomocą encoding/json.

package main

import (
    "encoding/json"
    "fmt"
)

// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
    ID      int64    `json:"id"`
    Name    string   `json:"name"`
    Tags    []string `json:"tags"`
    Address Address  `json:"address"`
}

type Address struct {
    City string `json:"city"`
}

func main() {
    data := []byte(`{
        "id": 1,
        "name": "Alice",
        "tags": ["admin", "dev"],
        "address": {"city": "Beijing"}
    }`)

    var u User
    if err := json.Unmarshal(data, &u); err != nil {
        panic(err)
    }

    fmt.Println(u.Name, u.Address.City)
}

Obsługa JSON z potencjalnie brakującymi polami

go

Jeśli niektóre pola API mogą nie istnieć, zmień odpowiednie pola na typy wskaźnikowe lub użyj z tagiem omitempty.

package main

import "encoding/json"

// 手动将字段改为指针,缺失时值为 nil
type User struct {
    ID      *int64  `json:"id,omitempty"`
    Name    *string `json:"name,omitempty"`
    Email   *string `json:"email,omitempty"`
}

func main() {
    data := []byte(`{"id": 1, "name": "Bob"}`)
    var u User
    json.Unmarshal(data, &u)
    if u.Email == nil {
        println("Email 字段缺失")
    }
}

Często Zadawane Pytania

Jak przekonwertować JSON na struct Go?

Wklej zawartość JSON w lewe pole wprowadzania, narzędzie automatycznie przekonwertuje w ciągu 400ms i wyświetli wygenerowaną struct Go po prawej. Możesz także przeciągnąć i upuścić pliki .json/.txt lub kliknąć „Przykład”, aby załadować wbudowane dane. Po konwersji skopiuj lub pobierz plik model.go jednym kliknięciem.

Czy wygenerowany kod Go zawiera tagi json?

Tak. Narzędzie generuje kod Go na podstawie quicktype-core, a domyślnie każde pole struct ma tag `json:"oryginalna_nazwa_pola"`, wygodny do bezpośredniej serializacji i deserializacji za pomocą Unmarshal/Marshal z encoding/json.

Czy tablice JSON zostaną przekonwertowane na wycinki Go?

Tak. Tablice JSON generują odpowiednie typy wycinków na podstawie typów elementów, np. `["a","b"]` generuje `[]string`, `[1,2,3]` generuje `[]int64`, `[{...},{...}]` generuje niestandardowe typy jak `[]UserItem`.

Czy zagnieżdżone obiekty wygenerują wiele struktur?

Tak. Każdy zagnieżdżony obiekt rekurencyjnie generuje niezależny typ struct, nazwany w PascalCase. Na przykład obiekt `address` generuje struct `Address`, do której odwołuje się główna struct przez pole `Address Address`.

Jaki typ generują wartości null?

Wartości null w JSON są zwykle wnioskowane jako `interface{}`, co jest bezpiecznym typem rezerwowym. Jeśli znasz rzeczywisty typ pola, możesz dodać przykładową wartość w JSON, wygenerować ponownie, a następnie ręcznie dostosować do konkretnego typu.

Czy mogę dostosować nazwę głównej struct?

Tak. Narzędzie domyślnie używa nazwy typu głównego (np. User); po zmianie nazwy typu głównego w ustawieniach wszystkie powiązane nazwy podtypów są synchronizowane, nazwa pobieranego pliku również się zmienia.

Co zrobić, jeśli JSON ma błędy formatowania?

Narzędzie automatycznie wykrywa poprawność JSON. Jeśli występują typowe błędy, takie jak końcowe przecinki, pojedyncze cudzysłowy, brakujące cudzysłowy, pojawi się przycisk „Napraw JSON”. Po kliknięciu narzędzie spróbuje automatycznie naprawić i ponownie wygenerować struct Go; jeśli naprawa się nie powiedzie, podana zostanie konkretna lokalizacja błędu.

Czy dane zostaną wysłane na serwer? Czy to prywatne i bezpieczne?

Nie. Całe parsowanie JSON, wnioskowanie typów i generowanie kodu Go odbywa się w Twojej przeglądarce przez Web Worker; wprowadzona zawartość i wygenerowany kod nigdy nie są wysyłane na żaden serwer ani zapisywane w chmurze. Wrażliwy JSON zawierający klucze API, tokeny lub dane biznesowe można bezpiecznie używać.

Czy wygenerowany kod można umieścić bezpośrednio w projektach Go?

Tak. Wygenerowany kod to standardowa struct Go z tagami json, można ją bezpośrednio skopiować do katalogu types/ lub models/ projektu. Zalecamy dostosowanie nazw typów i nazw pakietów zgodnie z konwencjami nazewnictwa projektu.

Czy to narzędzie jest darmowe? Czy muszę się rejestrować?

Całkowicie darmowe, nie wymaga rejestracji ani logowania. Otwórz stronę i używaj od razu, bez ograniczeń funkcji, znaków wodnych lub wymuszonego logowania.

Jakiego rozmiaru pliki JSON są obsługiwane?

Narzędzie nie ma ścisłych ograniczeń rozmiaru pliku, ale szybkość konwersji i wydajność renderowania zależą od wydajności przeglądarki i urządzenia. Zalecamy przetwarzanie JSON w granicach 1MB dla najlepszego doświadczenia; dla zbyt dużego JSON najpierw przetwórz przez formater JSON lub narzędzie do podziału.

Czy typy numeryczne będą jednolicie generować float64?

Nie. Narzędzie rozróżnia liczby całkowite i zmiennoprzecinkowe: pola całkowite generują int64, pola zmiennoprzecinkowe generują float64. Jeśli wolisz bardziej szczegółowe typy jak int, uint64, zastąp ręcznie po wygenerowaniu.

Rozwiązywanie problemów

Po prawej wyświetla się „Proszę wprowadzić dane JSON”

Lewe pole wprowadzania jest puste lub zawiera tylko białe znaki. Proszę wklej prawidłowy JSON, lub kliknij „Przykład”, aby załadować dane, lub przeciągnij i upuść pliki .json/.txt.

Pokazuje błąd parsowania JSON, ale nie może znaleźć lokalizacji błędu

Kliknij przycisk „Napraw JSON” pod polem wprowadzania; narzędzie automatycznie spróbuje naprawić końcowe przecinki, pojedyncze cudzysłowy, brakujące cudzysłowy, obiekty w stylu JS i inne problemy. Zmieniony wynik zostanie podświetlony po naprawie.

Wygenerowane nazwy pól nie są zgodne z konwencjami nazewnictwa Go

Narzędzie generuje nazwy pól w PascalCase z kluczy JSON. Jeśli klucze zawierają chiński lub znaki specjalne, mogą zostać wygenerowane eskejpowane nazwy pól. Zalecamy zmianę kluczy JSON na małe angielskie lub snake_case, a następnie jednolite dostosowanie po wygenerowaniu.

Pole null generuje interface{}, chcę zmienić na konkretny typ

Ponieważ null nie może wnioskować konkretnego typu, narzędzie używa interface{} jako rezerwowego. Możesz dać temu polu przykładową wartość (np. "" lub 0) w źródłowym JSON, wygenerować ponownie, a następnie zmienić typ na rzeczywisty, np. string/int64.

Strona zwalnia po konwersji dużego JSON

Renderowanie w przeglądarce zbyt dużego JSON i dużej liczby struct zużywa znaczną pamięć. Zalecenia: ① Zachowaj tylko kluczowe pola w przykładowym JSON; ② Podziel na wiele obiektów i konwertuj oddzielnie; ③ Zamknij inne karty w przeglądarce zużywające pamięć.

Typ elementu tablicy został wnioskowany jako []interface{}

Gdy tablica jest pusta [] lub typy elementów są niespójne, narzędzie używa interface{} jako rezerwowego. Możesz dodać przykładowe elementy tego samego typu lub ręcznie zmienić typ na konkretne typy wycinków jak []string, []int64 po wygenerowaniu.

Słownik

struct
Złożony typ danych Go, używany do łączenia wielu pól w jeden typ. Główna część kodu Go generowanego przez to narzędzie składa się z kilku definicji struct.
slice
Dynamiczny typ tablicy Go, składnia []T. To narzędzie mapuje tablice JSON na odpowiednie wycinki, np. []string, []int64, []UserItem.
json tag
Ciąg w odwrotnych cudzysłowach po polu struct Go, np. `json:"user_name"`, używany do określania nazwy pola podczas serializacji/deserializacji encoding/json. To narzędzie automatycznie generuje ten tag.
interface{}
Pusty typ interfejsu Go, może reprezentować dowolną wartość. To narzędzie używa interface{} jako bezpiecznego rezerwowego przy napotkaniu null w JSON lub nieokreślonym typie.
PascalCase
Styl nazewnictwa, w którym każde słowo zaczyna się od wielkiej litery, np. UserName, AddressCity. Go wymaga, aby eksportowane pola zaczynały się od wielkiej litery, dlatego to narzędzie automatycznie konwertuje nazwy pól JSON na PascalCase.
encoding/json
Pakiet kodowania/dekodowania JSON w bibliotece standardowej Go. Po sparowaniu struct wygenerowanych przez to narzędzie z tagami json, json.Unmarshal i json.Marshal mogą być używane bezpośrednio.
unmarshal
Proces parsowania strumienia bajtów JSON na wartość Go. Po wygenerowaniu struct najczęstszym użyciem jest wywołanie json.Unmarshal(data, &user).
omitempty
Typowa opcja dla tagu json Go, np. `json:"name,omitempty"`, oznacza pominięcie wyjścia, gdy pole ma wartość zerową. To narzędzie domyślnie nie generuje omitempty; dodaj ręcznie w razie potrzeby po wygenerowaniu.

Ściąga mapowania typów JSON na typy Go

To narzędzie automatycznie wnioskuje odpowiednie typy Go na podstawie typu wartości JSON; typowe mapowania są następujące:

Przykład wartości JSONWygenerowany typ GoUwaga
"hello"stringBezpośrednie mapowanie ciągu
true / falseboolWartość logiczna
42int64Liczba bez kropki dziesiętnej
3.14float64Liczba z kropką dziesiętną
nullinterface{}Bezpieczny rezerwowy, gdy nie można wnioskować konkretnego typu
["a","b"][]stringTablica ciągów
[1,2,3][]int64Tablica liczb całkowitych
[{...},{...}][]UserItemTablica obiektów, typy elementów generowane rekurencyjnie
{"id":1}UserObiekt generuje niezależną struct

Zalecenia wyboru typowych typów numerycznych w Go

Narzędzie domyślnie używa int64 i float64; dostosuj według potrzeb w rzeczywistych projektach:

ScenariuszZalecany typPowód
Zwykłe całkowite ID, licznikiint64Zgodne z domyślnym ustawieniem narzędzia, kompatybilne z większością liczb JSON
Automatycznie inkrementowany PK bazy danych znany jako dodatniuint64Unika liczb ujemnych, jaśniejsza semantyka
Systemy 32-bitowe lub jawne całkowite z małego zakresuint32Zmniejsza zużycie pamięci
Ceny, współrzędne, obliczenia naukowefloat64Zgodne z domyślnym ustawieniem narzędzia, standardowa precyzja zmiennoprzecinkowa
Dokładne obliczenia walutowedecimal.Decimal / intfloat64 ma ryzyko precyzji; polecane shopspring/decimal lub int w jednostkach groszy

Privacy & Security

Całe przetwarzanie tego narzędzia JSON na Go odbywa się całkowicie lokalnie w Twojej przeglądarce: parsowanie JSON, wnioskowanie typów, generowanie kodu Go są wykonywane po stronie klienta przez Web Worker; wprowadzona zawartość JSON, wysłane pliki i wygenerowany kod Go nigdy nie są wysyłane na żaden serwer, ani zapisywane, buforowane lub przechowywane w chmurze. Po zamknięciu lub odświeżeniu strony wszystkie dane wejściowe i wyjściowe są automatycznie usuwane z pamięci, tylko localStorage zachowuje Twoją ostatnią historię wprowadzania (można wyczyścić w dowolnym momencie). Odpowiednie do przetwarzania JSON zawierającego klucze API, tokeny, wrażliwe dane biznesowe.