我正在编写一个端点以返回Geckoboard的数据,但格式如下:

{
  "item": [
    {
      "value": "274057"
    },
    [
      "38594",
      "39957",
      "35316",
      "35913",
      "36668",
      "45660",
      "41949"
    ]
  ]
}
"item"是各种结构的数组。我将如何在Go中表示这些数据?

注意:这与我如何解码无关,我需要生成此格式。

最佳答案

这些东西比您想象的要容易。对于随便的读者来说,它的文档还不够完善。我建议使用ffjson,而不是普通的json。它的构成方式是您无需更改库名称以外的语法。

这很容易:

type User struct {
    Id      int    `json:'id'`
    Name    string `json:name`
    SomeId1 int    `json:some_id_1`
    SomeId2 int    `json:some_id_2`
    SomeId3 int    `json:some_id_3`
    SomeId4 int    `json:some_id_4`
}

item := map[string]User{}
for i := 0; i < 10; i++ {
    item[strconv.itoa(i)] = User{i, "Username X", 38393, 29384, 12393, 123981}
}
buf, err := ffjson.Marshal(&item)

结构的缺点(即使在ffjson中也是如此)将始终使用reflection,这在您需要高性能的时候,您将浪费大量CPU周期。将ffjson保留在 map 上时,它的速度是普通json的2-3倍。这样,库可以编译您编码(marshal)的每个数据结构并重新使用它,而不用通过reflect不断检查数据完整性/结构。

关于json - 在Go中表示此JSON的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30214094/

10-11 17:45