protobuf icon indicating copy to clipboard operation
protobuf copied to clipboard

int64 AND uint64 become string using jsonpb marshal

Open anotherGoogleFan opened this issue 5 years ago • 0 comments

The code is so simple:

package main

import (
	"os"

	"github.com/gogo/protobuf/jsonpb"
	"github.com/gogo/protobuf/proto"
)

func main() {
	marshaller := jsonpb.Marshaler{
		EnumsAsInts:  true,
		EmitDefaults: false,
		OrigName:     true,
	}

	marshaller.Marshal(os.Stdout, &TestInt{
		Ori: 16,
	})
}

type TestInt struct {
	Ori uint64 `protobuf:"varint,1,opt,name=ori,proto3" json:"ori,omitempty"`
}

func (m *TestInt) Reset()         { *m = TestInt{} }
func (m *TestInt) String() string { return proto.CompactTextString(m) }
func (*TestInt) ProtoMessage()    {}

I got {"ori":"16"}. But what I want is {"ori":16}.

I tried many times and found that if ori defined as uint8 int8 uint int uint32 int32 I can get {"ori":16}. But if it is int64 uint64 it becomes {"ori":"16"}.

anotherGoogleFan avatar Jan 16 '21 08:01 anotherGoogleFan