如何在golang中解析请求中的json?
how to parse the json in the request in golang?
数据:
仅提取典型结构
{
"logs": [{
"points": [
[30402984,1618566621000],
[32146400,1618566636000]
],
"tags.metric": {"name": "cpu_percent"}
}]
}
代码:
func postHandle(w http.ResponseWriter, r *http.Request) {
var contentStruct ContentStruct
err := json.NewDecoder(r.Body).Decode(&contentStruct)
log.Fatal(err)
fmt.Println(contentStruct.TagsMetric)
}
问题 1:
如何设计结构?
问题 2:
如何打印和查看未知的 json 结构?
type ContentStruct struct {
Logs []struct{
Points [][]int64 `json:"points"`
TagsMetric struct {
Name string `json:"name"`
} `json:"tags.metric"`
} `json:"logs"`
}
unknown, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(unknown))
请注意,无论您是否从解码 json 中得到错误,您的处理程序都会终止程序。你不应该在任何情况下都调用 log.Fatal
,只有当 err
值不是 nil
时,甚至可能不会,也许你应该退出处理程序,但这由你决定.
func postHandle(w http.ResponseWriter, r *http.Request) {
var contentStruct ContentStruct
if err := json.NewDecoder(r.Body).Decode(&contentStruct); err != nil {
log.Fatal(err)
}
if len(contentStruct.Logs) > 0 {
fmt.Println(contentStruct.Logs[0].TagsMetric)
}
}
数据:
仅提取典型结构
{
"logs": [{
"points": [
[30402984,1618566621000],
[32146400,1618566636000]
],
"tags.metric": {"name": "cpu_percent"}
}]
}
代码:
func postHandle(w http.ResponseWriter, r *http.Request) {
var contentStruct ContentStruct
err := json.NewDecoder(r.Body).Decode(&contentStruct)
log.Fatal(err)
fmt.Println(contentStruct.TagsMetric)
}
问题 1:
如何设计结构?
问题 2:
如何打印和查看未知的 json 结构?
type ContentStruct struct {
Logs []struct{
Points [][]int64 `json:"points"`
TagsMetric struct {
Name string `json:"name"`
} `json:"tags.metric"`
} `json:"logs"`
}
unknown, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(string(unknown))
请注意,无论您是否从解码 json 中得到错误,您的处理程序都会终止程序。你不应该在任何情况下都调用 log.Fatal
,只有当 err
值不是 nil
时,甚至可能不会,也许你应该退出处理程序,但这由你决定.
func postHandle(w http.ResponseWriter, r *http.Request) {
var contentStruct ContentStruct
if err := json.NewDecoder(r.Body).Decode(&contentStruct); err != nil {
log.Fatal(err)
}
if len(contentStruct.Logs) > 0 {
fmt.Println(contentStruct.Logs[0].TagsMetric)
}
}