在根级别解组没有键的元组

时间:2018-08-11 14:15:24

标签: go json-deserialization

我正在尝试用golang咬牙,并认为从rest api解析一些json是一个好用例。它看起来就像定义一个结构并将api响应解组到其中一样简单。

很自然地,我正在使用的api响应并不是一个很好的选择。我在玩craigslist jsonsearch-响应是2个对象的数组。第一个对象是结果数组,第二个对象是杂项。元数据。

[  
   [  
      {  
         "Ask":6000,
         "CategoryID":145,
         "ImageThumb":"https:\/\/images.craigslist.org\/01212_dZ9PfxSmjEH_50x50c.jpg",
         "Latitude":39.591784,
         "Longitude":-105.083209,
         "PostedDate":1533949799,
         "PostingID":6642987803,
         "PostingTitle":"1991 Jeep Wrangler YJ 4.0 4X4 $6000 OBO",
         "PostingURL":"https:\/\/denver.craigslist.org\/cto\/d\/1991-jeep-wrangler-yj-40-4xobo\/6642987803.html"
      }
   ],
   {  
      "NonGeocoded":2,
      "baseurl":"\/\/denver.craigslist.org",
      "clat":41.2077284889441,
      "clng":-101.993919320865,
      "clustered":0,
      "geocoded":118,
      "zoom":7
   }
]

这些对象都不具有键的事实是我迷路的地方。

我创建了一个结构,我认为该结构可以映射到此响应。没有作为领域标签的键,我迷路了……如果只有某种方式说响应中的第一个元素应该将Results []结构映射到第二个元素,然后映射到Metadata结构。

type SearchResponse struct {
    Results []struct {
        Ask int
        CategoryID int
        ImageThumb string
        Latitude float32
        Longitude float32
        PostedDate int64
        PostingID int64
        PostingTitle string
        PostingURL string
    }`json:"??first element??"`
    Metadata struct{
        NonGeocoded int
        baseurl string
        clat float32
        clng float32
        clustered int
        geocoded int
        zoom int
    }`json:"??second element??"`
}


func main() {

    searchUrl := "https://denver.craigslist.org/jsonsearch/cta?query=jeep+wrangler&sort=rel&max_price=15000&auto_transmission=1"
    resp, _ := http.Get(searchUrl)
    bytes, _ := ioutil.ReadAll(resp.Body)

    var searchResp SearchResponse
    if err := json.Unmarshal(bytes, &searchResp); err != nil {
        panic(err)
    }

    fmt.Print("it worked!")
    resp.Body.Close()

}

有没有更简单/更好的方法?

1 个答案:

答案 0 :(得分:1)

只需使用这个https://github.com/Anderson-Lu/gofasion。很简单。

Gofasion是一个轻量级的解析库,可在开发过程中简化接口JSON数据的解析。其最大的特点是支持链式调用,这意味着可以直接获取目标键名称和键值,而无需预先定义数据的结构。