mic*_*lbn 4 enums json go protocol-buffers grpc
我怎么能转换grpc
/ protobuf3
消息,JSON
其中enum
表示为string
?
例如,protobuf
消息:
enum Level {
WARNING = 0;
FATAL = 1;
SEVERE = 2;
...
}
message Http {
string message = 1;
Level level = 2;
}
Run Code Online (Sandbox Code Playgroud)
转换为:
j, _ := json.MarshalIndent(protoMessage, "", "\t")
Run Code Online (Sandbox Code Playgroud)
至:
{
"message": "Hello world!",
"level": 2,
}
Run Code Online (Sandbox Code Playgroud)
我希望得到:
{
"message": "Hello world!",
"level": "SEVERE",
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我发现其中一些模块(jsonpb)已被弃用。对我有用的是谷歌编码版本:
import "google.golang.org/protobuf/encoding/protojson"
jsonString := protojson.Format(protoMessage)
Run Code Online (Sandbox Code Playgroud)
我发现我应该使用protobuf/jsonpb
包装而不是标准json
包装。
所以:
j, _ := json.MarshalIndent(protoMessage, "", "\t")
Run Code Online (Sandbox Code Playgroud)
应该:
m := jsonpb.Marshaler{}
result, _ := m.MarshalToString(protoMessage)
Run Code Online (Sandbox Code Playgroud)
Level 不是字符串,而是一个 emum。我看到的实际上只有两个选择。
对于 #2,gogoprotobuf 有一个扩展(仍然标记为实验性的),可以让你这样做:
https://godoc.org/github.com/gogo/protobuf/plugin/enumstringer和 https://github.com/gogo/protobuf/blob/master/extensions.md
归档时间: |
|
查看次数: |
3343 次 |
最近记录: |