> 백엔드 개발 > Golang > 프로토콜 버퍼 구조체의 JSON에서 'omitempty' 태그를 제거하는 방법은 무엇입니까?

프로토콜 버퍼 구조체의 JSON에서 'omitempty' 태그를 제거하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-14 16:45:11
원래의
994명이 탐색했습니다.

How to Remove `omitempty` Tags from JSON in Protocol Buffer Structs?

프로토콜 버퍼 구조체의 생성된 JSON 태그에서 생략 태그를 제거하는 방법

특정 사용 사례에서는 프로토콜 버퍼 구조체에 대해 생성된 JSON 태그의 생략 태그입니다. 특히 gRPC와 함께 사용되는 프로토콜 버퍼는 데이터 직렬화 및 전송을 위한 강력한 도구입니다. 그러나 생략 태그를 포함하면 JSON 마샬링 중에 기본값이나 빈 값이 누락될 수 있어 바람직하지 않을 수 있습니다.

문제

사용 시 JSON 프록시가 있는 프로토콜 버퍼의 경우 생성된 구조체에는 예제에서 볼 수 있듯이 JSON 태그에 포함된 생략 태그가 있을 수 있습니다. 아래:

message Status {
  int32 code = 1;
  string message = 2;
}
로그인 후 복사

생성된 결과 구조체:

type Status struct {
  Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"`
  Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"`
}
로그인 후 복사

해결책

생성된 구조체에서 생략 태그를 제거하려면 다음을 수행하세요. 가능한 접근 방식은 두 가지입니다.

  1. 사용 grpc-gateway: grpc-gateway를 사용하는 경우 다음 옵션을 사용하여 Servemux를 구성할 수 있습니다.
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
로그인 후 복사
  1. google.golang.org 사용 /protobuf/encoding/protojson: grpc-gateway 외부 애플리케이션의 경우 다음을 사용할 수 있습니다. 마샬링을 위한 표준 인코딩/json 대신 google.golang.org/protobuf/encoding/protojson 패키지. 이 패키지는 기본값을 내보내는 기능을 포함하여 마샬링 프로세스를 보다 세밀하게 제어할 수 있습니다.
func sendProtoMessage(resp proto.Message, w http.ResponseWriter) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    m := protojson.Marshaler{EmitDefaults: true}
    m.Marshal(w, resp) // You should check for errors here
}
로그인 후 복사

이러한 접근 방식 중 하나를 구현하면 생성된 JSON 태그에서 생략 태그를 효과적으로 제거할 수 있습니다. 프로토콜 버퍼 구조를 사용하여 JSON 마샬링 중에 기본값이나 빈 값이 포함되도록 합니다.

위 내용은 프로토콜 버퍼 구조체의 JSON에서 'omitempty' 태그를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿