gpt4 book ai didi

go - json编码(marshal)数据的proto3消息类型

转载 作者:行者123 更新时间:2023-12-01 22:07:19 25 4
gpt4 key购买 nike

我正在实现一个 gRPC API,并希望添加 JSON 正文数据作为响应。

所以我试过:

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

原型(prototype)3
message Message {
string subject = 1;
string body = 2;
}

接口(interface)代码:
    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"},
}

最佳答案

如果您想要默认的 proto-to-JSON 转换,我认为不可能像这样使用 Protocol Buffer 将真正的任意对象嵌入到有效负载中。

您可以注入(inject)自己的逻辑来转换为 JSON 并让它按照您的期望进行。

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

请注意 json这里的标签:

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

不相关。 gRPC 正在根据 Protocol Buffer 类型 Message 生成 JSON ;这里的标签只影响 Go json 库如何渲染 Go 类型 Message .

关于go - json编码(marshal)数据的proto3消息类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60581330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com