[英]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.