嵌套结构中的JSON解组

时间:2018-07-17 16:17:19

标签: json go struct

我正在尝试将传入的JSON解组到包含结构数组的结构中。但是我得到了错误

  

“无效的输入。JSON格式错误。json:无法将数组解组到类型为app.AssetStorage的Go结构字段DataInput.Asset中”。

我尝试在此处重新创建代码:https://play.golang.org/p/RuBaBjPmWxO,但是我无法重现该错误(尽管传入的消息和代码是相同的)。

type AssetStorage struct {
    Event         string   `json:"Event"`
    EmployeeID    int      `json:"EmployeeID"`
    EmployeeEmail string   `json:"EmployeeEmail"`
    PerformedBy   string   `json:"PerformedBy"`
    Timestamp     string   `json:"Timestamp"`
    AlgorithmID   string   `json:"AlgorithmID"`
    AlgorithmHash string   `json:"AlgorithmHash"`
    Objects       []Object `json:"Objects"`
}

type Object struct {
    ShortName   string `json:"ShortName"`
    Hash        string `json:"Hash"`
    DestroyDate string `json:"DestroyDate"`
}

type DataInput struct {
    Username string
    Token    string       `json:"Token"`
    Asset    AssetStorage `json:"Asset"`
}

func main() {
    var data DataInput
    json.Unmarshal(input, data)
    data.Username = data.Asset.EmployeeEmail
    fmt.Printf("%+v\n", data)
}

2 个答案:

答案 0 :(得分:3)

您的代码中存在三个错误,一个是您在解组JSON时未使用DataInput结构的地址。

这应该是:

var data DataInput
json.Unmarshal(input, data)

如下所示:

var data DataInput
if err := json.Unmarshal(input, &data); err != nil {
    log.Println(err)
}

以上代码中的一条建议。永远不要跳过错误以了解更多有关错误的信息

下一步,错误提示:

  

无效的输入。 JSON格式错误。 json:无法将数组解组到   转到类型为app.AssetStorage的结构字段DataInput.Asset

DataInput.Asset应该是一个json对象数组,您应该在AssetStorage结构的声明中将[]AssetStorage更改为DataInput

另一个错误是,您将EmployeeID结构的AssetStorage字段的类型声明为int,应为string

Go Playground上的工作代码

答案 1 :(得分:0)

答案在错误消息中:

  

无效的输入。 JSON格式错误。 json:无法将数组解组到Go结构字段DataInput。类型为app.AssetStorage的资产

您要解析的json将DataInput.Asset作为AssetStorage对象的 array 。因此,类型必须为[]AssetStorage