GoLang中的动态嵌套结构

时间:2018-02-21 16:53:56

标签: go

我正在学习golang并希望从微服务响应中编写通用响应。

我的一般回应如下:

type GeneralResponse struct {
    Success string
    Message string
    Data    string
    Error   string
}

Data部分,我想要返回任何json,例如PersonInstruments或任何类型的对象列表。

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

我在这里尝试。 https://play.golang.org/p/dc0uKtS76aA

4 个答案:

答案 0 :(得分:1)

您应该在类型定义

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

然后将Marshal led json推入该属性。 您可以通过对[]byte中的其他类型进行编码并将其设置为Data属性来实现此目的。

喜欢https://play.golang.org/p/CyoN5pe_aNV

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

json.RawMessage来救援,以防你想要在不知道其格式的情况下捕获整个json。

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

结帐code。我已修改您的代码以将数据转储到响应中

答案 3 :(得分:0)

您可以使用json.RawMessage。 我已经实现了编码部分,你在这里找到更多解码 - https://golang.org/pkg/encoding/json/#RawMessage