Leave a Comment
Nullable fields in json generated from protobuf file
Table of Contents
Native support
With grpc v2 for go, protofile’s optional
option is supported, so you don’t need to import proto extensions anymore and use things like google.protobuf.StringValue
.
my.proto
1 2 3 |
message FeeView { optional string name = 1 [json_name = "name"]; } |
go mapper
1 2 3 4 5 6 7 8 |
var name *string if fee.Name != nil { name = &fee.Name } fee := &desc.FeeView{ Name: name, } |
Legacy way with extensions
Null for nil value
my.proto
1 2 3 4 5 |
import "google/protobuf/wrappers.proto"; message FeeView { google.protobuf.StringValue name = 1 [json_name = "name"]; } |
go mapper
1 2 3 4 5 6 7 8 9 10 11 12 |
import "github.com/gogo/protobuf/types" var name *types.StringValue if fee.Name != nil { name = &types.StringValue{ Value: *fee.Name, } } fee := &desc.FeeView{ Name: name, } |
Which will lead to this json response
1 |
{"translation_key":"a fee","name":null,"value":5,"style":"body","text_color":"grey","tag":null} |
Omit a field with nil value
If you want to omit the field completely, you can use oneof
approach
proto
1 2 3 4 5 |
message View { oneof subtitle { string oneof_string_subtitle = 1 [json_name = "subtitle"]; } } |
go mapper
1 2 3 4 5 6 7 8 9 10 |
var subtitle *desc.View_OneofStringSubtitle if in.Subtitle != nil { subtitle = &desc.View_OneofStringSubtitle{ OneofStringSubtitle: *in.Subtitle, } } return &desc.View{ Subtitle: subtitle, } |
More info on json options for grpc — https://blog.bullgare.com/2020/07/complete-list-of-swagger-options-to-protobuf-file/
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.