【问题标题】:how to parse the json in the request in golang? [closed]如何在golang中解析请求中的json? [关闭]
【发布时间】:2021-07-11 08:47:48
【问题描述】:

数据:
仅提取典型结构

{
  "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结构?

【问题讨论】:

  • 您提出了两个不同的问题。第一个是基于意见的(如何设计结构),第二个已经被问过很多次了,所以是重复的。

标签: go prometheus grafana


【解决方案1】:
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)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2018-10-27
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多