簡體   English   中英

JSON在嵌套結構中解組

[英]JSON unmarshal in nested struct

我試圖將傳入的JSON解組為包含結構數組的結構。 但是我得到了錯誤

“輸入無效.JSON格式錯誤.json:無法將數組解組為Go結構字段DataInput.Asset,類型為app.AssetStorage”

我試圖在這里重新創建代碼: 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)
}

您的代碼中有三個錯誤,一個是當您解組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的Go結構字段DataInput.Asset

DataInput.Asset應該是JSON對象的數組有你需要改變你AssetStorage[]AssetStorage在你的宣言DataInput結構。

還有一個錯誤是你將AssetStorage結構的EmployeeID字段的類型聲明為一個int ,它應該是一個string

去游樂場的工作守則

答案在錯誤消息中:

輸入無效。 JSON格式錯誤。 json:無法將數組解組為類型為app.AssetStorage的Go結構字段DataInput.Asset

您正在解析的json將DataInput.Asset作為AssetStorage對象的數組 所以,類型需要是[]AssetStorage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM