如何在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)
    }
}