我正在学习golang并希望从微服务响应中编写通用响应。
我的一般回应如下:
type GeneralResponse struct {
Success string
Message string
Data string
Error string
}
在Data
部分,我想要返回任何json,例如Person
,Instruments
或任何类型的对象列表。
但它应该是另一个json。 我尝试分配其他json对象,但它不起作用。 如果我将json数组作为字符串转储到它中,但它应该从接收器端解组,这很好。 我应该怎么做呢?
答案 0 :(得分:1)
您应该在类型定义
中使用RawMessagetype GeneralResponse struct {
Success string
Message string
Data json.RawMessage
Error string
}
然后将Marshal
led json推入该属性。
您可以通过对[]byte
中的其他类型进行编码并将其设置为Data
属性来实现此目的。
答案 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