JSON을 Go로
아직 내용이 없습니다
왼쪽에 JSON을 붙여넣으면 오른쪽에 Go 프로젝트에서 바로 사용할 수 있는 struct 타입 정의가 자동으로 생성됩니다. 순수 브라우저 로컬 처리, 회원가입이나 업로드가 필요하지 않습니다.
아직 내용이 없습니다
왼쪽에 JSON을 붙여넣으면 오른쪽에 Go 프로젝트에서 바로 사용할 수 있는 struct 타입 정의가 자동으로 생성됩니다. 순수 브라우저 로컬 처리, 회원가입이나 업로드가 필요하지 않습니다.
JSON to Go는 JSON 형식의 데이터를 Go 언어 struct 타입 정의로 자동 변환하는 과정입니다. JSON은 REST API, 설정 파일, 메시지 큐, 로그에서 가장 흔한 데이터 교환 형식이며 Go는 강한 타입 언어입니다. 개발 중에 JSON의 동적 구조를 struct로 매핑해야 encoding/json으로 역직렬화할 수 있습니다. 특히 중첩 객체의 경우 struct를 수동으로 작성하면 필드를 빠뜨리거나 타입을 잘못 쓰기 쉬운데, 이 도구는 반복 작업을 자동화하는 것을 목표로 합니다.
Go의 struct는 `type Name struct { ... }`로 선언하는 복합 데이터 타입입니다. 각 필드는 이름과 타입으로 구성되며, 필드 이름이 다른 패키지에서 접근 가능하려면 대문자로 시작해야 합니다. 이를 '내보낸 식별자'라고 합니다. 이 도구는 JSON 필드 이름을 PascalCase의 내보낸 필드 이름으로 자동 변환합니다. 예를 들어 `user_name`은 `UserName`으로 매핑되며 원본 키는 json 태그에 보존됩니다.
이 도구의 핵심 변환은 브라우저 내 jsonFormat Web Worker에서 수행되며 quicktype-core의 Go 렌더러를 `just-types` 및 `no-comments` 옵션으로 호출합니다. 전체 프로세스는 백엔드 서비스에 의존하지 않습니다: 입력된 JSON은 로컬에서 파싱되고 타입이 추론되며 Go 코드가 생성되어 마지막으로 오른쪽 편집기에 표시됩니다.
타입 추론은 일반적인 JSON에서 Go로의 매핑을 따릅니다: 문자열은 `string`, 불리언은 `bool`, 정수는 `int64`, 부동소수점은 `float64`, 배열은 슬라이스 `[]T`, 객체는 독립적인 struct, `null`은 `interface{}`로 매핑됩니다. 중첩 객체는 재귀적으로 처리되어 계층 구조가 명확하게 유지됩니다.
수동 작성과 비교할 때 도구가 생성한 코드는 '실행 가능한 초안'입니다. 개발자는 보통 실제 Go 프로젝트에 넣기 전에 루트 타입 이름, 패키지 이름, 필드 타입 정밀도(예: int64를 int로 변경), 포인터 타입 사용 여부만 미세 조정하면 됩니다. 한 번의 클릭 복사와 model.go 다운로드와 결합하여 연동과 모델링 단계의 반복 작업이 크게 줄어듭니다.
생성된 struct를 프로젝트에 복사한 후 encoding/json으로 API 응답을 직접 역직렬화합니다.
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)
}API의 특정 필드가 존재하지 않을 수 있는 경우 해당 필드를 포인터 타입으로 변경하거나 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 字段缺失")
}
}왼쪽 입력 상자에 JSON 내용을 붙여넣으면 도구가 400ms 이내에 자동으로 변환하여 오른쪽에 생성된 Go struct를 표시합니다. .json/.txt 파일을 드래그 앤 드롭하여 업로드하거나 '예제'를 클릭하여 내장 데이터를 로드할 수도 있습니다. 변환이 완료되면 한 번의 클릭으로 model.go 파일을 복사하거나 다운로드할 수 있습니다.
네. 이 도구는 quicktype-core를 기반으로 Go 코드를 생성하며, 기본적으로 각 struct 필드 뒤에 `json:"원본필드명"` 태그가 붙어 encoding/json의 Unmarshal/Marshal로 직렬화와 역직렬화를 바로 할 수 있습니다.
네. JSON 배열은 요소 타입에 따라 해당 슬라이스 타입을 생성합니다. 예를 들어 `["a","b"]`는 `[]string`을, `[1,2,3]`은 `[]int64`를, `[{...},{...}]`는 `[]UserItem`과 같은 사용자 정의 타입을 생성합니다.
네. 각 중첩 객체는 재귀적으로 독립적인 struct 타입을 생성하며 PascalCase로 명명됩니다. 예를 들어 `address` 객체는 `Address` struct를 생성하고 주 struct에서 `Address Address` 필드로 참조합니다.
JSON의 null 값은 일반적으로 `interface{}`로 추론되며 이는 안전한 폴백 타입입니다. 해당 필드의 실제 타입을 알고 있다면 JSON에 예제 값을 추가하고 다시 생성한 후 구체적인 타입으로 수동으로 조정할 수 있습니다.
네. 도구는 기본적으로 루트 타입 이름(예: User)을 사용합니다. 설정에서 루트 타입 이름을 수정하면 연결된 모든 하위 타입 이름이 동기화되어 업데이트되고 다운로드되는 파일 이름도 그에 따라 변경됩니다.
도구가 JSON 유효성을 자동으로 감지합니다. 후행 쉼표, 작은따옴표, 누락된 따옴표 등 일반적인 오류가 있으면 'JSON 수정' 버튼이 나타납니다. 클릭하면 도구가 자동 수정을 시도하고 Go struct를 다시 생성합니다. 수정에 실패하면 구체적인 오류 위치가 표시됩니다.
아니요. 모든 JSON 파싱, 타입 추론, Go 코드 생성은 Web Worker를 통해 브라우저 내에서 완료됩니다. 입력한 내용과 생성된 코드는 어떤 서버에도 업로드되지 않으며 클라우드에 기록되지 않습니다. API 키, 토큰, 비즈니스 데이터가 포함된 민감한 JSON도 안심하고 사용할 수 있습니다.
네. 생성된 코드는 json 태그가 포함된 표준 Go struct로 프로젝트의 types/ 또는 models/ 디렉토리에 직접 복사하여 사용할 수 있습니다. 프로젝트 명명 규칙에 따라 타입 이름과 패키지 이름을 미세 조정하는 것을 권장합니다.
완전히 무료이며 회원가입이나 로그인이 필요하지 않습니다. 페이지를 열면 바로 사용할 수 있으며 기능 제한, 워터마크, 강제 로그인이 없습니다.
도구에 엄격한 파일 크기 제한은 없지만 변환 속도와 렌더링 성능은 브라우저와 기기 성능에 의존합니다. 최상의 경험을 위해 1MB 이내의 JSON을 처리하는 것을 권장합니다. 매우 큰 JSON은 먼저 JSON 포맷터나 분할 도구로 처리하세요.
아니요. 도구는 정수와 부동소수점을 구분합니다: 정수 필드는 int64를, 부동소수점 필드는 float64를 생성합니다. int, uint64 등 더 구체적인 타입을 선호하는 경우 생성 후 수동으로 교체하세요.
왼쪽 입력 상자가 비어 있거나 공백 문자만 있습니다. 유효한 JSON을 붙여넣거나 '예제'를 클릭하여 데이터를 로드하거나 .json/.txt 파일을 드래그 앤 드롭하세요.
입력 상자 아래의 'JSON 수정' 버튼을 클릭하세요. 도구가 후행 쉼표, 작은따옴표, 누락된 따옴표, JS 스타일 객체 등의 문제를 자동으로 수정하려고 시도합니다. 수정 후 수정된 결과가 하이라이트되어 표시됩니다.
도구는 JSON 키에서 PascalCase 필드 이름을 생성합니다. 키에 한국어나 특수 문자가 포함된 경우 이스케이프된 필드 이름이 생성될 수 있습니다. JSON 키를 영문 소문자나 snake_case로 변경한 후 생성 후 일괄 조정하는 것을 권장합니다.
null은 구체적인 타입을 추론할 수 없으므로 도구는 interface{}를 폴백으로 사용합니다. 원본 JSON에 해당 필드의 예제 값(예: "" 또는 0)을 주고 다시 생성한 후 string/int64 등 실제 타입으로 변경할 수 있습니다.
매우 큰 JSON과 많은 양의 struct를 브라우저에서 렌더링하면 상당한 메모리가 소모됩니다. 권장 사항: ① 예제 JSON에 핵심 필드만 유지; ② 여러 객체로 분할하여 별도로 변환; ③ 브라우저의 다른 메모리 많이 사용하는 탭을 닫으세요.
배열이 비어 있거나 []이거나 요소 타입이 일관되지 않을 때 도구는 interface{}를 폴백으로 사용합니다. 같은 타입의 예제 요소를 추가하거나 생성 후 []string, []int64 등 구체적인 슬라이스 타입으로 수동으로 변경할 수 있습니다.
이 도구는 JSON 값의 타입에 따라 해당하는 Go 타입을 자동으로 추론합니다. 일반적인 매핑은 다음과 같습니다:
| JSON 값 예시 | 생성된 Go 타입 | 참고 |
|---|---|---|
"hello" | string | 문자열 직접 매핑 |
true / false | bool | 불리언 값 |
42 | int64 | 소수점 없는 숫자 |
3.14 | float64 | 소수점 있는 숫자 |
null | interface{} | 구체적인 타입을 추론할 수 없을 때 안전한 폴백 |
["a","b"] | []string | 문자열 배열 |
[1,2,3] | []int64 | 정수 배열 |
[{...},{...}] | []UserItem | 객체 배열, 요소 타입이 재귀적으로 생성됨 |
{"id":1} | User | 객체는 독립적인 struct를 생성 |
도구는 기본적으로 int64와 float64를 사용합니다. 실제 프로젝트에서 필요에 따라 조정하세요:
| 시나리오 | 권장 타입 | 이유 |
|---|---|---|
| 일반적인 정수 ID, 카운트 | int64 | 도구 기본값과 일치하며 대부분의 JSON 숫자와 호환 |
| 양수로 알려진 데이터베이스 자동 증가 PK | uint64 | 음수를 피하고 의미가 더 명확함 |
| 32비트 시스템 또는 명시적으로 작은 범위 정수 | int32 | 메모리 사용량 감소 |
| 가격, 좌표, 과학 계산 | float64 | 도구 기본값과 일치하며 표준 부동소수점 정밀도 |
| 정밀한 통화 계산 | decimal.Decimal / int | float64는 정밀도 위험이 있으므로 shopspring/decimal 또는 센트 단위 int를 권장 |
이 JSON to Go 도구의 모든 처리는 귀하의 브라우저에서 완전히 로컬로 완료됩니다: JSON 파싱, 타입 추론, Go 코드 생성이 모두 Web Worker를 통해 클라이언트 측에서 실행됩니다. 입력한 JSON 내용, 업로드한 파일, 생성된 Go 코드는 어떤 서버에도 업로드되지 않으며 클라우드에 기록, 캐시, 저장되지 않습니다. 페이지를 닫거나 새로고침하면 모든 입력과 출력 내용이 메모리에서 자동으로 지워지며 localStorage는 최근 입력 기록만 유지합니다(언제든지 지울 수 있음). API 키, 토큰, 민감한 비즈니스 데이터가 포함된 JSON 처리에 적합합니다.