如何在golang中解析结构并打印结构中的项目?

时间:2017-02-06 21:19:23

标签: arrays json go struct

以下是一个类似的示例: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结构中获得某些项目?

有关如何执行此操作甚至改进结构格式的任何建议? 谢谢!

1 个答案:

答案 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包将匹配仅按大小写不同的字段(尽管它更喜欢完全匹配,如果有的话模糊)。