如何在Golang中将JSON解析为具有变量类型的映射

时间:2018-04-25 03:18:05

标签: json go go-map

我有来自Salt-Stack API的以下JSON响应:

{
    "return": [{
        "<UUID1>": true,
        "<UUID2>": "Minion did not return. [No response]",
        "<UUID3>": true,
        "<UUID4>": false
    }]
}

我通常使用地图结构在Go:

中解组
type getMinionsStatusResponse struct {
    Returns     []map[string]bool `json:"return"`
}

但是由于返回错误响应的第二行(以字符串格式)而不是布尔值,我收到以下错误:json: cannot unmarshal string into Go value of type bool

我想知道如何使用encoding/json包在Golang中编组这种JSON格式?

1 个答案:

答案 0 :(得分:2)

对于解组输出不同的动态json,使用接口来解组相同的。它将解组整个json,因为它内部有任何类型的结构。

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    jsonbytes := []byte(`{
        "return": [{
            "<UUID1>": true,
            "<UUID2>": "Minion did not return. [No response]",
            "<UUID3>": true,
            "<UUID4>": false
            }]
    }`)
    var v interface{}
    if err := json.Unmarshal(jsonbytes, &v); err != nil{
        fmt.Println(err)
    }
    fmt.Println(v)
}

Playground