登录
首页 >  Golang >  Go问答

序列化proto3消息类型到json格式

来源:stackoverflow

时间:2024-03-08 09:18:28 232浏览 收藏

哈喽!今天心血来潮给大家带来了《序列化proto3消息类型到json格式》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我正在实现 grpc api,并希望添加 json 正文数据作为响应。

所以我尝试过:

type message struct {
    subject string `json:"subject"`
    body    interface{}  `json:"body"`
}

原型3

message message {
    string subject = 1;
    string body = 2;
}

api代码:

en, err := client.request.get(req.name)
    if err != nil {
        return nil, status.error(codes.invalidargument, err.error())
    }

    data, _ := json.marshal(en.body)

    return &response.message{
        subject: en.subject,
        body:    string(data),
    }, nil

添加此获取 grpc api 响应后:

{
  "subject": "dev",
  "body": "{\"name\":\"environment\",\"description\":\"the default environment\"}",
}

问题是正文 json 键值是动态的。 有什么方法可以让我们得到类似的回复

{
  "subject": "dev",
  "body": {"name":"environment","description":"The default environment"},
}

解决方案


如果您想要默认的原始到 json 转换,我认为不可能像这样使用协议缓冲区将真正任意的对象嵌入到有效负载中。

您可以注入自己的逻辑来转换为 json,并让它执行您期望的操作。

根据您更广泛的目标,Any 可能也有用。

请注意此处的 json 标记:

type Message struct {
    Subject string `json:"subject"`
    Body    interface{}  `json:"body"`
}

不相关。 grpc 基于协议缓冲区生成 json,类型为 message;这里的标签仅影响 go json 库如何渲染 go 类型 message

今天关于《序列化proto3消息类型到json格式》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>