Golang使用proto3協議導致零值字段不顯示


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":""} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM