2 回答
TA贡献1824条经验 获得超5个赞
您应该使用与输入文档匹配的结构来解组:
type Entry struct {
Lat string `json:"lat"`
Lon string `json:"lon"`
DisplayName string `json:"display_name"`
Address struct {
Address string `json:"address"`
Country string `json:"country"`
Code string `json:"country_code"`
} `json:"address"`
Geo struct {
Type string `json:"type"`
Coordinates [][][]float64 `json:"coordinates"`
} `json:"geojson"`
}
然后解组为一个条目数组:
var entries []Entry
json.Unmarshal(data,&entries)
并且,用于entries构造Locations
TA贡献1886条经验 获得超2个赞
您需要对 Unmarshal 的结构更加精确。根据官方 JSON 规范,您还需要在密钥周围加上双引号。省略引号仅适用于 JavaScript,JSON 需要这些。
最后一件事,我知道这很愚蠢,但是最后一个内部数组之后的最后一个逗号也是无效的,必须删除它:
package main
import (
"encoding/json"
"fmt"
)
type Location struct {
Lat string `json:"lat"`
Lng string `json:"lon"`
DisplayName string `json:"display_name"`
Address Address `json:"address"`
GeoJSON Geo `json:"geojson"`
}
type Address struct {
Address string `json:"address"`
Country string `json:"country"`
CountryCode string `json:"country_code"`
}
type Geo struct {
Type string `json:"type"`
Coordinates [][]Coordinate `json:"coordinates"`
}
type Coordinate [2]float64
func main() {
inputJSON := `
[
{
"lat": "41.189301799999996",
"lon": "11.918255998031015",
"display_name": "Some place",
"address": {
"address": "123 Main St.",
"country": "USA",
"country_code": "+1"
},
"geojson": {
"type": "Polygon",
"coordinates": [
[
[14.4899021,41.4867039],
[14.5899021,41.5867039]
]
]
}
}
]`
var locations []Location
if err := json.Unmarshal([]byte(inputJSON), &locations); err != nil {
panic(err)
}
fmt.Printf("%#v\n", locations)
}
- 2 回答
- 0 关注
- 265 浏览
添加回答
举报