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

Go 解组在根级别没有键的元组,go,json-deserialization,Go,Json Deserialization,我正在尝试使用golang,并且认为从RESTAPI解析一些json是一个很好的用例。它看起来很简单,只需定义一个结构并将api响应解组到该结构中即可 当然,我正在使用的api响应并不完全适合这种情况。我正在玩craigslist jsonsearch-响应是一个由2个对象组成的数组。第一个对象是结果数组,第二个对象是misc。元数据 [ [ { "Ask":6000, "CategoryID":145, "Im

我正在尝试使用golang,并且认为从RESTAPI解析一些json是一个很好的用例。它看起来很简单,只需定义一个结构并将api响应解组到该结构中即可

当然,我正在使用的api响应并不完全适合这种情况。我正在玩craigslist jsonsearch-响应是一个由2个对象组成的数组。第一个对象是结果数组,第二个对象是misc。元数据

[  
   [  
      {  
         "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
   }
]
事实上,这两个物体都没有钥匙,这正是我迷路的地方

我已经创建了一个我认为应该映射到此响应的结构。没有作为字段标记的键,我迷路了。。。如果只有某种方式可以说响应中的第一个元素应该将结果[]结构和第二个项映射到元数据结构

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()

}
有更简单/更好的方法吗?

就用这个吧。这很容易


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

json是一个数组,Go结构被json包视为一个对象。[…]和类型SearchResponse struct{…}不计算。如果json是数组,请使用Go slices,如果是对象,请使用structs或maps。。。另一种选择是让SearchResponse实现json.Unmarshaler接口,然后它可以,例如,移除周围的尖括号,将元对象和unmarshal的结果数组拆分为两个字段,然后将两个json分别拆分为两个字段,要真正解开所有字段并以更清晰的方式记录它们:我很欣赏你的两个操场示例——它们都是合理的答案。我很乐意接受这两个答案中的任何一个作为最后的答案——将帖子作为答案而不是评论。