2

所以我有一些 JSON(由 PetFinder API 提供)有一个 JSON 数组“宠物”。我想从中解组,使用“encoding/json”包,一个宠物结构。 这种结构会是什么样子?我找不到任何关于 unmarshall 函数如何处理 JSON 数组的示例。

一旦我有一个适当的结构,这就是我打算做的事情:

pfetch := new(PetsFetcher) // where PetsFetcher is the struct im asking for
err := json.Unmarshal(body, &pfetch)

这是正文中的 json(以一段 ascii 字节的形式):

{
  "petfinder": {
    "lastOffset": {
      "$t": 5
    },
    "pets": {
      "pet": [
        {
          "options": {
            "option": [
              {
                "$t": "altered"
              },
              {
                "$t": "hasShots"
              },
              {
                "$t": "housebroken"
              }
            ]
          },
          "breeds": {
            "breed": {
              "$t": "Dachshund"
            }
          }
    },
        {
          "options": {
            "option": {
              "$t": "hasShots"
            }
          },
          "breeds": {
            "breed": {
              "$t": "American Staffordshire Terrier"
            }
          },
          "shelterPetId": {
            "$t": "13-0164"
          },
          "status": {
            "$t": "A"
          },
          "name": {
            "$t": "HAUS"
          }
        }
      ]
    }
  }
}

提前致谢。

4

2 回答 2

2

我真的不知道这些$t属性在你的 JSON 中做了什么,所以让我们用一个简单的例子来回答你的问题。要解组此 JSON:

{
  "name": "something",
  "options": [
    {
      "key": "a",
      "value": "b"
    },
    {
      "key": "c",
      "value": "d"
    },
    {
      "key": "e",
      "value": "f"
    },
  ]
}

Data你在 Go 中需要这种类型:

type Option struct {
    Key   string
    Value string
}

type Data struct {
    Name    string
    Options []Option
}
于 2013-06-16T07:42:05.193 回答
1

您可以将 javascript 数组解组为切片。marhsal/unmarshalling 规则Marshaljson 包中描述。

要解组看起来像“$t”的键,您必须注释它将解包到的结构。

例如:

type Option struct {
    Property string `json:"$t,omitempty"`
}

可能出现的 $t 是一个错误,并且应该是字典中的键。

于 2013-06-16T09:36:27.690 回答