json - 解析来自谷歌地图的 JSON 响应
问题描述
我需要创建一个代理服务器来连接到谷歌地图网络服务,我发现一个教程可以完成我需要的 95% 的工作。本教程使用 golang,我对 golang 几乎是全新的,如果我完全按照它,它工作正常。但是,当我尝试从教程中更改某些内容时,我显然搞砸了,哈哈。
我现在需要的问题是本教程仅从 google-maps 响应中解析 2 个变量,即纬度和经度。对于我的应用程序的其余部分,我还需要地点 ID。
我收到了来自 google-maps 的回复,这不是问题。如果我将其解析为
type placeResults struct {
Results []struct {
Geometry struct {
Location struct {
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
} `json:"location"`
} `json:"geometry"`
} `json:"results"`
}
它工作正常,给我经纬度,不用担心。
但如果我改为尝试,
type placeResults struct {
Results []struct {
Geometry struct {
Location struct {
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
} `json:"location"`
} `json:"geometry"`
id struct {
Id string `json:"id"`
}
} `json:"results"`
}
它告诉我:
json:无法将字符串解组到 Go struct 字段中。 struct { Id string "json:\"id\"" } 类型的 ID
现在 id 变量不是几何的一部分,而是响应的通用部分,所以我认为这将是正确的语法。显然我错了。但是包含这个的正确语法是什么?
解决方案
谷歌地方 API 响应看起来像,
"geometry" : {
"location" : {
"lat" : -33.866651,
"lng" : 151.195827
},
"viewport" : {
"northeast" : {
"lat" : -33.8653881697085,
"lng" : 151.1969739802915
},
"southwest" : {
"lat" : -33.86808613029149,
"lng" : 151.1942760197085
}
}
},
"icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
"id" : "4f89212bf76dde31f092cfc14d7506555d85b5c7",
所以你需要将 id 字段声明为字符串,而不是结构。您需要更改 placeResult 结构。
type modifiedPlaceResult struct {
Geometry struct {
Location struct {
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
} `json:"location"`
} `json:"geometry"`
Id string `json:"id"`
}
尝试对 Unmarshaling 数据使用 modifiedPlaceResult 结构,一切都会好的。我附上了 Go 游乐场的示例:https: //play.golang.org/p/Q4rM-jluoFe
推荐阅读
- python - 在没有浏览器的情况下授权多个谷歌 API
- php - 如何在 PHP 中用 (·) 断点替换 (.) 点?
- javascript - 为什么我的表单输入在重新渲染后只注册一个字符?
- django - Many_to_many --> FieldError: Related Field got invalid lookup: contains
- javascript - 在不复制的情况下在 Blob 和 ArrayBuffers 之间转换?
- node.js - npm dev:start 不运行
- visual-studio-code - 我可以将 VS Code 中的“跳转到符号”调整为“跳转到方法/函数/类”吗?
- debugging - Coldfusion cflog 没有向日志文件添加任何文本
- c - 将元素动态添加到数组 C
- javascript - 如何将数组中的唯一值设置为“0”而不是未定义?(Javascript)