> 백엔드 개발 > Golang > Protobuf가 생성한 JSON에서 'omitempty' 태그를 제거하는 방법은 무엇입니까?

Protobuf가 생성한 JSON에서 'omitempty' 태그를 제거하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-30 13:04:11
원래의
794명이 탐색했습니다.

How to Remove `omitempty` Tags from Protobuf-Generated JSON?

Protobuf 생성 JSON에서 생략 태그 제거

JSON 프록시와 함께 사용할 Protobuf 클래스를 생성할 때 다음에서 생략 태그가 나타날 수 있습니다. 생성된 구조체 이러한 태그는 JSON 마샬링 중에 빈 필드를 억제하는데, 이는 특정 시나리오에서 바람직하지 않을 수 있습니다.

생성된 구조체에서 생략 태그를 제거하려면:

grpc-gateway 사용

grpc-gateway를 사용하는 경우 다음을 지정하여 생략 동작을 비활성화할 수 있습니다. Servemux를 생성할 때 다음 옵션을 사용하세요.

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
로그인 후 복사

grpc-gateway 외부

grpc-gateway 외부에서 생략 동작 없이 Protobuf 메시지를 마샬링하려면 다음을 사용하세요. 표준 인코딩/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) // Check for errors here
}
로그인 후 복사

참고:

  • google.golang.org/protobuf 패키지는 더 이상 사용되지 않는 github.com/golang/protobuf 및 해당 jsonpb를 대체합니다. package.
  • EmitDefaults 옵션은 빈 필드를 보장합니다. JSON 출력에 포함됩니다.

위 내용은 Protobuf가 생성한 JSON에서 'omitempty' 태그를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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