登录
首页 >  Golang >  Go问答

在golang中获取JSON格式的x-www-form-urlencoded请求的嵌套键值对

来源:stackoverflow

时间:2024-02-23 08:54:26 482浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《在golang中获取JSON格式的x-www-form-urlencoded请求的嵌套键值对》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我有一个用例,我们在 x-www-form-urlencoded 主体中获取嵌套键值,如下所示

name=abc&age=12&notes[key1]=value1&notes[key2]=value2

我尝试了 url.parsequery("name=abc&age=12&notes\[key1\]=value1&notes\[key2\]=value2") 但它给出了

{
  "name": "abc",
  "age": 12,
  "notes[key1]": "value1",
  "notes[key2]": "value2"
}

如何为上述正文获取以下 json 格式的值

{
  "name": "abc",
  "age": 12,
  "notes": {
    "key1": "value1",
    "key2": "value2"
  }
}

注释可能采用 3 级嵌套格式

我尝试过 url.parsequeryr.form 但它们都给出了 notes[key1]notes[key2]


正确答案


要使用这种类型的查询字符串参数名称解​​组嵌套键值,可以使用 derekstavis/go -qs 这是 rack 查询字符串解析器的端口。

这会返回一个 map[string]interface{},其嵌套键值如下。

值得注意的是,age 的值作为字符串返回,但是,这对于 url.parsequery 来说是相同的。如果需要将其编组为整数,则可以分叉和修改该包。

{
  "age": "12",
  "name": "abc",
  "notes": {
    "key1": "value1",
    "key2": "value2"
  }
}

go playground 上提供了完整的示例,代码如下:

go playground 网址:https://go.dev/play/p/px7uzwrns5v

package main

import (
    "encoding/json"
    "fmt"
    "log"

    qs "github.com/derekstavis/go-qs"
)

func main() {
    v := "name=abc&age=12&notes[key1]=value1&notes[key2]=value2"

    q, err := qs.Unmarshal(v)
    if err != nil {
        log.Fatal(err)
    }

    j, err := json.MarshalIndent(q, "", "  ")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(j))
}

到这里,我们也就讲完了《在golang中获取JSON格式的x-www-form-urlencoded请求的嵌套键值对》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>