簡體   English   中英

如何解組數組內的對象

[英]How to unmarshal objects inside array

我正在嘗試訪問數組內的對象值

[
  {
    "name": "London",
    "lat": 51.5073219,
    "lon": -0.1276474,
    "country": "GB",
    "state": "England"
  }
]

我使用此代碼解組它

content, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Fatal(err)
    }

    var data []ResponseData
    err = json.Unmarshal(content, &data)
    if err != nil {
        log.Fatal(err)
    }

這是我的結構

type ResponseData struct {
    Name       string      `json:"name"`
    Lat        float32     `json:"lat"`
    Lon        float32     `json:"lon"`
    Country    string      `json:"country"`
    State      string      `json:"state"`
}

稍后我需要簡單地fmt.Println(data.Lat, data.Lon)

您提供的代碼應該成功解組您的 JSON; 問題在於您嘗試使用結果的方式。 您說您想使用fmt.Println(data.Lat, data.Lon)但這不起作用,因為data是切片( []ResponseData )而不是ResponseData 您可以使用fmt.Println(data[0].Lat, data[0].Lon) (在檢查元素數量之后)或遍歷元素。

下面可能會幫助您進行實驗(游樂場- 這包含比下面更多的內容):

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

const rawJSON = `[
  {
    "name": "London",
    "lat": 51.5073219,
    "lon": -0.1276474,
    "country": "GB",
    "state": "England"
  }
]`

type ResponseData struct {
    Name    string  `json:"name"`
    Lat     float32 `json:"lat"`
    Lon     float32 `json:"lon"`
    Country string  `json:"country"`
    State   string  `json:"state"`
}

func main() {
    var data []ResponseData
    err := json.Unmarshal([]byte(rawJSON), &data)
    if err != nil {
        log.Fatal(err)
    }

    if len(data) == 1 { // Would also work for 2+ but then you are throwing data away...
        fmt.Println("test1", data[0].Lat, data[0].Lon)
    }

    for _, e := range data {
        fmt.Println("test2", e.Lat, e.Lon)
    }
}

暫無
暫無

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

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