Mff*_*nMn 7 go protocol-buffers
我在消息中添加了一条扩展消息,需要将其作为json封送.但是,扩展消息的字段名称是[message.extension_message_name]
.
我希望它只是命名extension_message_name
,没有大括号和前缀,因为这个扩展消息存在于我们的API的其他地方,并且有这个奇怪的名称会增加混乱.
据我所知,负责的代码位于protobuf/jsonpb中,其中JSONName设置为,fmt.Sprintf("[%s]", desc.Name
并且似乎无法覆盖.
任何人有一个解决方法吗?
abc*_*bet 13
根据语言指南:
消息字段名称映射为小驼峰命名法并成为 JSON 对象键。如果指定了 json_name 字段选项,则指定的值将用作键。
因此,用标记您的字段json_name
应该可以解决问题,例如:
message TestMessage {
string myField = 1 [json_name="my_special_field_name"];
}
Run Code Online (Sandbox Code Playgroud)
编组为 JSON 时应具有myField
名称。my_special_field_name
wgo*_*l01 -1
一种选择是使用 Go 的encoding/json
包和标记结构来自己解码/编组 json,如下所示:
type Example struct {
ExtMessageName string `json:"extension_message_name"`
}
msg := Example{ExtMessageName: "This is a test"}
jsonBytes, err := json.Marshal(msg)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(string(jsonBytes))
Run Code Online (Sandbox Code Playgroud)
然后输出:
{"extension_message_name":"This is a test"}
Run Code Online (Sandbox Code Playgroud)