簡體   English   中英

將嵌套的對象數組從 JSON 解析為 Go

[英]Parsing a Nested Array of Objects from JSON to Go

我查看了許多有關如何使用 go 解析 JSON 的示例,並且了解了基礎知識。 但是我無法正確解析一組對象。 我為對象創建了一個結構,但沒有骰子!

這是一個關於它的游樂場:游樂場

package main

import (
    "encoding/json"
    "fmt"
)

type Outer struct {
    Number  int      `json: "number"`
    Message string   `json: "message"`
    Person  []Person `json: "person"`
}

type Person struct {
    craft string `json: "craft"`
    name  string `json: "name"`
    }

func main() {
    text := `{"people": [{"craft": "ISS", "name": "Sergey Rizhikov"}, {"craft": "ISS", "name": "Andrey Borisenko"}, {"craft": "ISS", "name": "Shane Kimbrough"}, {"craft": "ISS", "name": "Oleg Novitskiy"}, {"craft": "ISS", "name": "Thomas Pesquet"}, {"craft": "ISS", "name": "Peggy Whitson"}], "message": "success", "number": 6}`

    textBytes := []byte(text)


    people1 := Outer{}

    err := json.Unmarshal(textBytes, &people1)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(people1)
}

您的代碼中有幾個錯誤:

  1. 您在 json 中有people字段,但在 struct 聲明中有person
  2. Person結構中,字段必須以大寫字母開頭。
  3. 刪除 json 標簽中的空格json:"name"有效而json: "name"無效。

這是固定版本。

更新了問題修復的代碼:

package main

import (
    "encoding/json"
    "fmt"
)

type Outer struct {
    Number  int      `json:"number"`
    Message string   `json:"message"`
    Person  []Person `json:"person"`
}

type Person struct {
    Craft string `json:"craft"`
    Name  string `json:"name"`
}

func main() {
    text := `{"person": [{"craft": "ISS", "name": "Sergey Rizhikov"}, {"craft": "ISS", "name": "Andrey Borisenko"}, {"craft": "ISS", "name": "Shane Kimbrough"}, {"craft": "ISS", "name": "Oleg Novitskiy"}, {"craft": "ISS", "name": "Thomas Pesquet"}, {"craft": "ISS", "name": "Peggy Whitson"}], "message": "success", "number": 6}`

    textBytes := []byte(text)

    people1 := Outer{}

    err := json.Unmarshal(textBytes, &people1)
    if err != nil {
        fmt.Println(err)
        return
    }

    b, err := json.Marshal(people1)
    if err != nil {
        fmt.Println("marshalling error")
        return
    }
    fmt.Println("Data : ", string(b))
}

輸出:

Data :  {"number":6,"message":"success","person":[{"craft":"ISS","name":"Sergey Rizhikov"},{"craft":"ISS","name":"Andrey Borisenko"},{"craft":"ISS","name":"Shane Kimbrough"},{"craft":"ISS","name":"Oleg Novitskiy"},{"craft":"ISS","name":"Thomas Pesquet"},{"craft":"ISS","name":"Peggy Whitson"}]}

在操場上簽到: https : //play.golang.org/p/tdNpgUAOLVF

將人員結構字段更新為公共,如下所示:

type AutoGenerated struct {
    People []People `json:"people"`
    Message string `json:"message"`
    Number int `json:"number"`
}
type People struct {
    Craft string `json:"craft"`
    Name string `json:"name"`
}

使用該工具並自動幫助您。 最好的 JSON 到 Golang 轉換器

暫無
暫無

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

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