Golang 上的 JSON - 解组石墨数据

我正在尝试使用 Golang 和 JSON 尝试使用从 Graphite API 中提取的数据进行一些计算。


为简单起见,Graphite 发送的数据片段是:


[

{

    "target": "server1.loadavg.1min",

    "datapoints": [

        [

            0.16,

            1422770850

        ],

        [

            0.16,

            1422770880

        ],

        [

            null,

            1422771120

        ]

    ]

},

{

    "target": "server2.loadavg.1min",

    "datapoints": [

        [

            0.19,

            1422770850

        ],

        [

            null,

            1422771390

        ],

        [

            0.14,

            1422771420

        ]

    ]

}

]

我一直在阅读有关如何对 JSON 任意数据使用通用接口{}的 go json 教程,但我在该过程的某些方面遇到了困难。


我试图定义一个结构来保存这些数据,读取文件内容并将其解组到这个结构中:


type Graphite struct {

  Metric struct {

    Target     string      `json:"target"`

    Datapoints [][]float64 `json:"datapoints"`

  }

}


var results []Graphite

err = json.Unmarshal(d, &r)

if err != nil {

    panic(err)

}

fmt.Printf("%v\n", r)

但结果是:


[{{ []}} {{ []}}]

我当然可以使用通用接口来完成它{},但我想知道我在这里遗漏了什么。


请你帮助我好吗?


富国沪深
浏览 240回答 2
2回答

蝴蝶不菲

我喜欢从最简单的类型开始,然后努力解决问题。首先,您需要表示您的数据点。type DataPoint []float64那么度量只是一个目标和一系列数据点。type Metric struct {    Target string      `json:"target"`    Points []DataPoint `json:"datapoints"`}不需要你的Graphite结构。你的 JSON 只是一个Metrics的 JSON 数组。var results []Metricerr := json.Unmarshal([]byte(data), &results)这是一个带有完整示例的操场链接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go