我正试图用嵌套的json解压缩一个json。
我正在使用这个结构
type atomRequest struct {
Stream string `json:"stream"`
Data map[string]interface{} `json:"data"`
}如果嵌套的json是字符串化的,则Unmasrhaling失败,值为零。
如果我正在编组的字节数组具有非转义“数据”,则正确地填充“数据”映射。
如果嵌套的json被压缩,我将得到一个空的数据映射。
我正在寻找一个解组嵌套数据的解决方案,不管它是否是字符串化的。
示例:此输入工作:
{"stream":"foobar","data":{"errorID":112,"timestamp":1524737466}}此输入不起作用:
{
"stream": "foo",
"data": "{\"cd3\":\"514\",\"cd8\":\"none\"}"
}你能帮忙吗?
谢谢
发布于 2018-04-29 13:05:46
使用json.RawMessage捕获可变字段:
type atomRequest struct {
Stream string `json:"stream"`
RawData json.RawMessage `json:"data"`
Data map[string]interface{} `json:"-"`
}解封顶级JSON:
var req atomRequest
if err := json.Unmarshal(data, &req); err != nil {
// handle error
}如果data是字符串,则反封送处理以删除额外级别的编码:
if len(req.RawData) > 0 && req.RawData[0] == '"' {
var s string
if err := json.Unmarshal(req.RawData, &s); err != nil {
// handle error
}
req.RawData = json.RawMessage(s)
}最后,对map[string]interface{}进行封送
if err := json.Unmarshal(req.RawData, &req.Data); err != nil {
// handle error
}https://stackoverflow.com/questions/50086711
复制相似问题