JSON ↔ Protobuf 툴킷
JSON에서 .proto 스키마를 추론하거나 내 스키마로 Protobuf를 인코딩·디코딩
JSON 샘플을 붙여 넣거나 예시를 불러온 뒤 .proto 생성을 선택하세요.
세 가지 변환을 따로
JSON → .proto는 JSON 샘플에서 proto3 스키마를 추론합니다. JSON → Protobuf는 직접 준비한 .proto 스키마와 메시지 타입으로 JSON 페이로드를 바이너리로 인코딩하고, Protobuf → JSON은 16진수, base64 또는 바이너리 파일을 다시 JSON으로 디코딩합니다. 스키마 추론과 실제 인코딩은 다른 작업이므로 각각 별도의 모드가 있습니다.
스키마 추론 방식
기본적으로 문자열은 string, 불리언은 bool, 소수는 double, 정수는 int64가 됩니다. 오늘 int32에 맞는 값이 내일도 맞으리라는 보장이 없기 때문입니다. 객체는 키에서 PascalCase로 이름 붙인 메시지가 되고, 한 가지 타입의 배열은 repeated 필드가 되며, 배열의 모든 객체를 병합해 선택적 키를 놓치지 않습니다. null뿐이거나 비어 있거나 타입이 섞인 값은 google.protobuf.Value를 사용하고 메모로 표시됩니다. 필드 번호는 키 순서대로 매겨지며, 스키마를 배포한 뒤에는 와이어 형식의 일부이므로 바꾸면 안 됩니다.
인코딩과 디코딩
JSON은 ProtoJSON 매핑을 사용합니다: lowerCamelCase 필드 이름, 문자열로 된 64비트 정수, base64 bytes, 이름으로 된 열거형, 그리고 Timestamp, Duration, Struct, 래퍼 같은 기본 제공 타입의 특수 형식입니다. 고급 옵션으로 기본값 출력, proto 필드 이름 유지, 열거형 숫자 출력, 알 수 없는 JSON 필드 무시를 설정할 수 있습니다. 디코딩할 때는 선택한 메시지가 선언하지 않은 필드 번호를 보여 주는데, 이는 메시지 타입을 잘못 골랐다는 흔한 신호입니다.
제한과 개인정보
스키마는 자체적으로 완결되어야 합니다. Google 기본 제공 타입(Timestamp, Duration, Struct, Any, Empty, FieldMask, 래퍼)은 내장되어 있고, 다른 import는 네트워크에서 가져오지 않습니다. 샘플 하나로는 열거형, 맵, 존재 여부, 발전 계획을 알 수 없으므로 추론한 스키마는 반드시 검토하세요. 모든 처리는 브라우저에서 이루어지며 페이로드와 스키마는 업로드되지 않습니다.
