首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json编组数据的proto3消息类型

json编组数据的proto3消息类型
EN

Stack Overflow用户
提问于 2020-03-08 03:16:55
回答 2查看 1.1K关注 0票数 0

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

所以我试过了:

代码语言:javascript
复制
type Message struct {
    Subject string `json:"subject"`
    Body    interface{}  `json:"body"`
}

proto3

代码语言:javascript
复制
message Message {
    string subject = 1;
    string body = 2;
}

接口代码:

代码语言:javascript
复制
    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接口响应后:

代码语言:javascript
复制
{
  "subject": "dev",
  "body": "{\"name\":\"environment\",\"description\":\"The default environment\"}",
}

问题是body JSON键值是动态的。有没有什么方法可以让我们得到这样的回应呢?

代码语言:javascript
复制
{
  "subject": "dev",
  "body": {"name":"environment","description":"The default environment"},
}
EN

回答 2

Stack Overflow用户

发布于 2020-03-12 07:43:45

试试这个:转到go游乐场(https://play.golang.org/),然后把这个放进去:

代码语言:javascript
复制
package main

import (
    "fmt"
    "encoding/json"
    "strconv"
)


func main() {

    b := []byte(`"{\"name\":\"environment\",\"description\":\"The default environment\"}"`)
    fmt.Println(string(b))


    var msg string
        json.Unmarshal([]byte(b), &msg)

    smsg, _ := strconv.Unquote(string(b))

    fmt.Println(smsg)


}

我们要做的是对编组后的响应进行解组,然后使用strconv unquote来获得我们想要的字符串

票数 1
EN

Stack Overflow用户

发布于 2020-03-12 08:01:21

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

您可以注入自己的逻辑来完成到JSON的转换,并让它执行您所期望的操作。

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

请注意,此处的json标记:

代码语言:javascript
复制
type Message struct {
    Subject string `json:"subject"`
    Body    interface{}  `json:"body"`
}

是不相关的。gRPC基于协议缓冲区类型Message生成JSON;这里的标签只影响Go json库如何呈现Go类型的Message

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60581330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档