Go 戈兰的动态嵌套结构

Go 戈兰的动态嵌套结构,go,Go,我正在学习golang,想从microservices response编写通用响应 我的一般反应是: type GeneralResponse struct { Success string Message string Data string Error string } 在Data部分,我想返回任何json,比如Person、Instruments或任何类型的对象的列表 但它应该是另一个json。 我尝试分配其他json对象,但不起作用。 若我将

我正在学习golang,想从microservices response编写通用响应

我的一般反应是:

type GeneralResponse struct {
    Success string
    Message string
    Data    string
    Error   string
}
Data
部分,我想返回任何json,比如
Person
Instruments
或任何类型的对象的列表

但它应该是另一个json。 我尝试分配其他json对象,但不起作用。 若我将json数组作为字符串转储到该数组中,这是可以的,但它应该从接收端解组。 我该怎么做呢


我在这里试着

您应该在类型定义中使用RawMessage

type GeneralResponse struct {
  Success string
  Message string
  Data    json.RawMessage
  Error   string
}
然后将
封送
引导的json推送到该属性中。 您可以通过在
[]字节中编码其他类型并将它们设置为
数据属性来实现这一点


就像在

中一样,如果将封送的JSON放入字符串中,它将被封送为字符串(因为它是一个字符串),并且接收端必须将其解组两次(因为它被封送了两次)。您想要的可能更多的是:

type GeneralResponse struct {
    Success string
    Message string
    Data    interface{}  // interface{} can be anything
    Error   string
}

通过这种方式,您可以将任何数据放入
数据中,并将其直接编组到响应中。

json.RawMessage可以帮助您在不知道其格式的情况下捕获整个json

type GeneralResponse struct {
    Success string
    Message string
    Data    json.RawMessage
    Error   string
}

看看这个。我已经修改了您的代码,将数据转储到响应中

您可以使用
json.RawMessage
来实现这一点。
我已经实现了编码部分,您可以在这里找到更多要解码的内容-

如果您想确保可以对值进行编码,请在这里发布您尝试使用的json,否则接口{}很抱歉,我无法编写正确的问题。实际上,我只需要数据来存储一种类型的值,但需要动态存储。不只是人或仪器,我怎么推?你能写一个伪代码吗。我试过谷歌,但不确定。谢谢,它解决了我的问题!我将很快用解决方案更新问题。没有理由使用指向消息的指针。RawMessage已经是切片类型。使用指针更不方便,因为它们不能用作[]字节。现在如何在数据中转储json数组?我通过修改数据并将数组转储到接口{}中添加了代码。您正在使用接口{}显示代码,我认为应该是RawMessage?您希望转储数据json。当您不使用任何底层类型来获取值时,将使用RawMessage。这里您已经在使用slice[]