如何在golang中解析请求中的json? [关闭]

Posted

技术标签:

【中文标题】如何在golang中解析请求中的json? [关闭]【英文标题】:how to parse the json in the request in golang? [closed] 【发布时间】: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结构?

【问题讨论】:

您提出了两个不同的问题。第一个是基于意见的(如何设计结构),第二个已经被问过很多次了,所以是重复的。 【参考方案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)
    

【讨论】:

以上是关于如何在golang中解析请求中的json? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 中的文件中解析 JSON? [关闭]

json库在golang中的使用

如何让golang 把变量解析为json,并输出为文件。

golang 快速解析api 返回的data数据

使用 Alamofire 解析字典中的 json 对象 [关闭]

如何在我的应用程序中解析/获取 JSON [关闭]