如何将grpc
/ protobuf3
邮件转换为JSON
,enum
表示为string
?
例如,protobuf
消息:
enum Level {
WARNING = 0;
FATAL = 1;
SEVERE = 2;
...
}
message Http {
string message = 1;
Level level = 2;
}
转换为:
j, _ := json.MarshalIndent(protoMessage, "", "\t")
要:
{
"message": "Hello world!",
"level": 2,
}
我希望得到:
{
"message": "Hello world!",
"level": "SEVERE",
}
由于
答案 0 :(得分:3)
Level不是一个字符串,它是一个emum。我看到的确只有两种选择。
对于#2,gogoprotobuf有一个扩展名(仍然标记为实验性),让你做到这一点:
https://godoc.org/github.com/gogo/protobuf/plugin/enumstringer和 https://github.com/gogo/protobuf/blob/master/extensions.md
答案 1 :(得分:3)
我发现我应该使用protobuf/jsonpb
包而不是标准json
包。
这样:
j, _ := json.MarshalIndent(protoMessage, "", "\t")
应该是:
m := jsonpb.Marshaler{}
result, _ := m.MarshalToString(protoMessage)
答案 2 :(得分:0)
当序列化json对象时,这将很有帮助。
var msg bytes.Buffer
m := jsonpb.Marshaler{}
err := m.Marshal(&msg, event)
msg.Bytes()
将msg
转换为字节流。