为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 上的 JSON - 解组石墨数据

Golang 上的 JSON - 解组石墨数据

Go
富国沪深 2021-09-20 20:41:10
我正在尝试使用 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 []Graphiteerr = json.Unmarshal(d, &r)if err != nil {    panic(err)}fmt.Printf("%v\n", r)但结果是:[{{ []}} {{ []}}]我当然可以使用通用接口来完成它{},但我想知道我在这里遗漏了什么。请你帮助我好吗?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

我喜欢从最简单的类型开始,然后努力解决问题。首先,您需要表示您的数据点。


type DataPoint []float64


那么度量只是一个目标和一系列数据点。


type Metric struct {

    Target string      `json:"target"`

    Points []DataPoint `json:"datapoints"`

}

不需要你的Graphite结构。你的 JSON 只是一个Metrics的 JSON 数组。


var results []Metric

err := json.Unmarshal([]byte(data), &results)

这是一个带有完整示例的操场链接。


查看完整回答
反对 回复 2021-09-20
  • 2 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信