Golang使用proto3協議導致零值字段不顯示
問題描述
proto協議生成的結構體如果使用直接轉成json會導致零值字段不顯示,這樣的json是有毛病的,可以使用如下方法解決
示例Demo
package main
import (
"./pb"
"bytes"
"encoding/json"
"fmt"
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
)
func main() {
var i int32 = 0
test(i)
}
func test(t int32) {
d := &pb.FrameD6 {
Datetimehour: "2020033014",
Recordcnt: t,
}
str,_ := json.Marshal(d)
s := TransProtoToJson(d)
fmt.Printf("@@@--incorrect JSON---> %+v \n",string(str))
fmt.Printf("@@@--correct JSON---> %+v \n",s)
}
func TransProtoToJson (pb proto.Message) string{
var pbMarshaler jsonpb.Marshaler
pbMarshaler = jsonpb.Marshaler{
EmitDefaults: true,
OrigName: true,
EnumsAsInts: true,
}
_buffer := new(bytes.Buffer)
_ = pbMarshaler.Marshal(_buffer, pb)
return string(_buffer.Bytes())
}
運行結果
@@@--incorrect JSON---> {"datetimehour":"2020033014"}
@@@--correct JSON---> {"recordid":"","laneid":"","programver":"","datetimehour":"2020033014","recordcnt":0,"moneycnt":0,"companyid":"","parkid":""}