编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天小编就整理分享《golang 使用随机键解组 JSON》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过编程网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。
问题内容
我正在从 api 使用 json,并且其中一个返回字段使用动态值作为键控,例如下面的返回中的 service-1234。
{
"timeseriesid": "serversidefailurerate",
"displayname": "number of server side errors",
"dimensions": [
"service"
],
"unit": "percent (%)",
"detailedsource": "services",
"types": [],
"dataresult": {
"datapoints": {
"service-1234": [
[
1563472440000,
0.8034610630407911
]
]
},
"unit": "percent (%)",
"resolutioninmillisutc": 3600000,
"aggregationtype": "avg",
"entities": {
"service-1234": "server"
},
"timeseriesid": "serversidefailurerate"
},
"aggregationtypes": [
"avg",
"sum",
"min",
"max"
],
"filter": "builtin"
}
我使用以下代码来收集和提取值,但我不知道如何引用结构中的动态键。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/Http"
)
type Timeseries struct {
TimeseriesId string
DisplayName string
Dimensions []string
Unit string
DetailedSource string
Types []string
DataResult struct {
DataPoints interface{}
ResolutionInMillisUTC int
AggregationType string
Entities interface{}
TimeseriesId string
}
AggregationTypes []string
Filter string
}
func main() {
response, err := http.Get("url")
if err != nil {
fmt.Printf("The HTTP request failed with error %s\n", err)
} else {
temp, _ := ioutil.ReadAll(response.Body)
// fmt.Println(string(temp))
var timeseries Timeseries
if err := json.Unmarshal(temp, ×eries); err != nil {
fmt.Println("There was an error:", err)
}
fmt.Println(timeseries)
}
}
我期望输出各个键中的值,但我不知道如何开始。
解决方案
我认为解组到地图可能没问题......然后对于范围地图
bytes := []byte("a")
var a = make(map[string]string)
err := json.Unmarshal(bytes, &a)
if err != nil {
panic(err)
}
今天关于《Golang 使用随机键解组 json》的内容介绍就到此结束.