是否可以在Go中按原样添加嵌套的json?

时间:2018-08-14 14:10:47

标签: json string go marshalling

这是“按原样”添加嵌套json的可能方法。嵌套的json没有任何结构,并且可能有所不同。我需要将嵌套的json数据直接放入根节点。

https://play.golang.org/p/MzBt7DLQEpD

type RootJson struct {
    NestedJson []byte
    AdditionalField string
}

func main() {
    nestedJson := []byte("{\"number\": 1, \"string\": \"string\", \"float\": 6.56}")

    rootJson := RootJson{nestedJson, "additionalField"}
    payload, _ := json.Marshal(&rootJson)

    fmt.Println(string(payload))

}

1 个答案:

答案 0 :(得分:4)

是的,有可能。使用实现自定义封送/拆组的json.RawMessage类型,将其照原样“渲染”到JSON输出中。这只是一个普通的字节片:

type RawMessage []byte

其值应该是原始JSON文本的UTF-8编码字节序列(正是您进行转换时所得到的,例如[]byte("someText"))。

type RootJson struct {
    NestedJson      json.RawMessage
    AdditionalField string
}

这样,输出将是(在Go Playground上尝试):

{"NestedJson":{"number":1,"string":"string","float":6.56},
    "AdditionalField":"additionalField"}

(我添加的缩进。)