如何在 Go 中解析数组元素有多种类型的 JSON?
How do I parse JSON in Go where array elements have more than one type?
如何将 https://api.twitchinsights.net/v1/bots/online 的 JSON 响应解析为 Go 中的数组并遍历每个条目?
我不明白这个结构,因为没有键只有值...
谁能帮忙解释一下这是怎么回事?
我已经映射了它,但后来我得到了类似
的东西
map[_total:216 bots:[[anotherttvviewer 67063 1.632071051e+09] [defb 26097 1.632071051e+09] [commanderroot 17531 1.632071048e+09] [apparentlyher 16774 1.63207105e+09]...
但我无法遍历地图。
因为 API 您正在处理 return 的数据,它可以是字符串或数字(在数组数组 属性 bots
中) ,您需要使用 []interface{}
作为该数组每个元素的类型,因为空接口 (https://tour.golang.org/methods/14) 在 运行 时适用于任何类型。
type response struct {
Bots [][]interface{} `json:"bots"`
Total int `json:"_total"`
}
然后,当您遍历切片中的每个项目时,您可以使用反射检查其类型。
对于架构中的 API 到 return 数据是理想的,其中每个 JSON 数组元素都与它的每个其他元素具有相同的 JSON 类型大批。这将更容易解析,尤其是使用像 Go 这样的静态类型语言。
例如,API 可以 return 数据如下:
{
"bots": [
{
"stringProp": "value1",
"numberProps": [
1,
2
]
}
],
"_total": 1
}
然后,您可以在不使用空接口的情况下编写表示 API 响应的结构:
type bot struct {
StringProp string `json:"stringProp"`
NumberProps []float64 `json:"numberProps"`
}
type response struct {
Bots []bot `json:"bots"`
Total int `json:"_total"`
}
但有时您无法控制正在使用的 API,因此您需要乐于以更动态的方式从响应中解析数据。如果您确实可以控制 API,您应该考虑 return 以这种方式处理数据。
如何将 https://api.twitchinsights.net/v1/bots/online 的 JSON 响应解析为 Go 中的数组并遍历每个条目?
我不明白这个结构,因为没有键只有值...
谁能帮忙解释一下这是怎么回事?
我已经映射了它,但后来我得到了类似
的东西map[_total:216 bots:[[anotherttvviewer 67063 1.632071051e+09] [defb 26097 1.632071051e+09] [commanderroot 17531 1.632071048e+09] [apparentlyher 16774 1.63207105e+09]...
但我无法遍历地图。
因为 API 您正在处理 return 的数据,它可以是字符串或数字(在数组数组 属性 bots
中) ,您需要使用 []interface{}
作为该数组每个元素的类型,因为空接口 (https://tour.golang.org/methods/14) 在 运行 时适用于任何类型。
type response struct {
Bots [][]interface{} `json:"bots"`
Total int `json:"_total"`
}
然后,当您遍历切片中的每个项目时,您可以使用反射检查其类型。
对于架构中的 API 到 return 数据是理想的,其中每个 JSON 数组元素都与它的每个其他元素具有相同的 JSON 类型大批。这将更容易解析,尤其是使用像 Go 这样的静态类型语言。
例如,API 可以 return 数据如下:
{
"bots": [
{
"stringProp": "value1",
"numberProps": [
1,
2
]
}
],
"_total": 1
}
然后,您可以在不使用空接口的情况下编写表示 API 响应的结构:
type bot struct {
StringProp string `json:"stringProp"`
NumberProps []float64 `json:"numberProps"`
}
type response struct {
Bots []bot `json:"bots"`
Total int `json:"_total"`
}
但有时您无法控制正在使用的 API,因此您需要乐于以更动态的方式从响应中解析数据。如果您确实可以控制 API,您应该考虑 return 以这种方式处理数据。