왼쪽에 Go를 붙여넣고 "변환" 을 누르세요 — JSON으로 바꿔드립니다Go 코드를 붙여넣으세요

이 도구가 하는 일

json:"..." 태그가 달린 Go 구조체와, 어딘가에 선언된 composite literal(order := Order{...})이 있고, encoding/json이 만들어낼 JSON 모양이 필요할 때 쓰는 도구입니다. 둘 다 왼쪽 에디터에 붙여넣고 변환을 누르세요. 태그를 읽고, omitempty- 규칙을 적용하고, nil 포인터를 처리한 뒤, json.MarshalIndent가 출력할 것과 똑같은 JSON을 내놓습니다. go run으로 왔다 갔다 할 필요가 없습니다.

단순 치환이 아니라 실제 Go의 마샬링 의미를 그대로 따릅니다. 익스포트된 필드 이름은 json 태그의 첫 부분으로 리네임됩니다. omitempty는 제로값(빈 문자열, 0, false, nil, 빈 slice/map)을 제거합니다. - 태그는 필드를 빼버립니다. 임베딩된(익명) 구조체 필드는 encoding/json과 동일한 방식으로 승격됩니다. time.TimeRFC 8259 호환 RFC 3339 문자열로, 바이트 슬라이스([]byte)는 base64로 인코딩됩니다.

숫자 타입도 Go 규칙을 그대로 따릅니다. float64는 정밀도를 유지하고, int/int64는 숫자로 남으며, nil 포인터는 JSON null이 됩니다. 슬라이스는 JSON 배열이 되지만, nil 슬라이스는 []가 아닌 null이 됩니다 — Marshal의 기본 동작과 같습니다. map[string]V는 JSON 객체가 됩니다. 여러 구조체를 한 번에 붙여넣어도 됩니다 — 각 인스턴스가 최상위 항목으로 나옵니다.

사용 방법

3단계입니다. 작은 구조체 하나든, <code>types.go</code> 파일 전체든 다 됩니다.

1

Go를 붙여넣으세요 (또는 샘플 시도)

구조체 정의와 composite literal(order := Order{...})을 왼쪽 에디터에 넣으세요. 구조체 하나, 임베디드 필드가 있는 여러 구조체, 패키지 레벨 선언 — 다 괜찮습니다. 현실감 있는 출발점이 필요하면 샘플 불러오기를 누르세요.

package 줄과 import는 그대로 두세요 — 파서가 무시합니다. 구조체 태그, 메서드 리시버, 주석 모두 문제없습니다. 참고로 encoding/json.Marshal 문서에 이 도구가 따르는 모든 규칙이 나와 있습니다. 엣지 케이스를 만나면 Go 소스 저장소를 한 번 보세요.

2

변환 누르기

녹색 변환 버튼을 누르세요. 도구가 구조체 정의를 파싱하고, composite literal을 해석한 뒤, 태그 규칙을 적용해 들여쓰기된 JSON을 만들어냅니다.

3

JSON 복사하기

오른쪽 패널이 API 요청, 테스트 테이블, 설정 파일, 혹은 os.ReadFile로 불러올 픽스처에 바로 쓸 수 있는 JSON으로 채워집니다.

실제로 요긴한 순간

HTTP 핸들러 요청/응답 샘플

<code>net/http</code>이나 <code>gin</code> 핸들러용 요청/응답 구조체가 있을 때, 리터럴과 함께 붙여넣으면 curl로 보내거나 Postman에 붙일 JSON 바디가 나옵니다.

테이블 드리븐 테스트 픽스처

테이블 테스트의 구조체 인스턴스를 골든 파일 테스트나 외부 도구를 위한 독립 JSON 파일로 바꿀 수 있습니다.

Kubernetes CRD와 매니페스트

커스텀 리소스나 컨트롤러 페이로드를 나타내는 Go 구조체를, <code>kubectl apply</code>나 Kubernetes API가 쓰는 JSON 형태로 바꿉니다.

Kafka / NATS / gRPC-gateway 메시지

Go 메시지 구조체를 JSON으로 직렬화해서, 전체 파이프라인을 띄우지 않고 프로듀서 테스트, 샘플 페이로드, 문서화에 쓸 수 있습니다.

자주 묻는 질문

구조체 json 태그를 반영합니까?

네. 태그의 첫 값으로 필드가 리네임되고, omitempty는 제로값을 제거하며, -는 필드를 완전히 제외합니다. encoding/json Marshal 레퍼런스에 문서화된 규칙과 동일합니다.

time.Time과 []byte는 어떻게 처리됩니까?

time.Timetime.Time.MarshalJSON과 같이 RFC 3339 (예: "2026-03-14T10:30:00Z")로 포맷됩니다. []byte는 표준 라이브러리 기본 동작과 동일하게 base64로 인코딩되어 JSON 문자열이 됩니다.

nil 포인터와 nil 슬라이스는요?

nil 포인터는 JSON null이 됩니다. nil 슬라이스도 null([]가 아닙니다)이 됩니다 — Go의 기본 동작입니다. 빈 배열을 원한다면 []T{}로 슬라이스를 초기화하세요.

임베디드(익명) 구조체 필드가 승격됩니까?

네. 임베디드 구조체의 필드는 외부 객체로 평탄화됩니다 — 임베디드 구조체 자체에 json 태그가 있는 경우만 예외입니다. encoding/json이 적용하는 규칙과 같습니다.

여러 구조체가 들어 있는 파일을 통째로 붙여도 됩니까?

네. 붙여넣은 내용 안에 인스턴스가 있는 모든 구조체 타입이 JSON에서 각자의 항목으로 나옵니다. 중첩 구조체 타입은 사용되는 위치에서 인라인으로 펼쳐집니다.

코드가 어딘가 저장됩니까?

코드는 변환을 위해 백엔드로 전송되지만 저장되거나 기록되지 않습니다. 그래도 온라인 도구 특성상, 민감한 코드는 붙여넣기 전에 한 번 살펴보세요.

함께 쓰면 좋은 도구

Go → JSON은 퍼즐의 한 조각입니다. 궁합이 좋은 도구들입니다: