首页 > 解决方案 > 解析来自谷歌地图的 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 变量不是几何的一部分,而是响应的通用部分,所以我认为这将是正确的语法。显然我错了。但是包含这个的正确语法是什么?

标签: jsongoogle-mapsgo

解决方案


谷歌地方 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


推荐阅读