以下是一个类似的示例:Parsing JSON in GoLang into struct 我从服务器得到一个json响应,我只需要获取某些数据。 我已经创建了一个示例代码:
package main
import (
"fmt"
"encoding/json"
)
type response struct {
Response []struct {
Stats struct {
A int `json:"a"`
B float64 `json:"b"`
C int `json:"c"`
D float64 `json:"d"`
E float64 `json:"e"`
F float64 `json:"f"`
G float64 `json:"g"`
H float64 `json:"h"`
I float64 `json:"i"`
J float64 `json:"j"`
} `json:"stats"`
Data []struct {
Num0 int64 `json:"0"`
Num1 interface{} `json:"1"`
} `json:"data"`
} `json:"response"`
}
func main() {
src := `
{
"response": [{
"stats": {
"a": 458,
"b": 302.3738,
"c": 0,
"d": 706.777,
"e": 2.423,
"f": 238.73375,
"g": 68.971,
"h": 85.1989781659389,
"i": 84.6381777592766,
"j": 292658.49
},
"data": [
[1453222860000, null],
[1453223160000, 3.769],
[1453223220000, 37.464]
]
}
]
}
`
var g response
json.Unmarshal([]byte(src), &g)
fmt.Println(g.Response[0].Stats)
}
我得到的输出是
`{458 302.3738 0 706.777 2.423 238.73375 68.971 85.1989781659389 84.6381777592766 292658.49}
`
我想从stat结构中获取某些项目。让我们说我想从stats结构中打印A或J的值。我怎么做? 我真的不需要数据结构。我从服务器得到的json响应给了我这些数据,但我真的不需要它。无论如何,我的问题是如何只在Stats结构中获得某些项目?
有关如何执行此操作甚至改进结构格式的任何建议? 谢谢!
答案 0 :(得分:1)
您可以简单地省略您不关心的任何结构。 JSON包将静默忽略源JSON中存在的任何目标结构中不存在的内容。因此,如果您不关心数据部分,请从结构中省略它。如果你只关心统计部分中的A和J,那么只包括那些。
type response struct {
Response []struct {
Stats struct {
A int `json:"a"`
J float64 `json:"j"`
} `json:"stats"`
} `json:"response"`
}
https://play.golang.org/p/W3bmlf15sF
编辑:另外值得注意的是,如果它们只是字段名称的小写,则不需要包含struct标记,因为JSON包将匹配仅按大小写不同的字段(尽管它更喜欢完全匹配,如果有的话模糊)。