如何将 POST 请求体中的参数解析为 map[string]string 类型?

huangapple go评论98阅读模式
英文:

How to parse parameters from POST body to map[string] string?

问题

如何将POST请求体中的参数解析为map[string]string

我正在使用gin框架,我可以将参数解析到预定义的结构体中,但在这种情况下,我不知道键名。
(当我知道键名时,我可以解析,但当我不知道时就有问题)

type Body struct {
    Name  string
    Email string
}

body := Body{}
err := json.NewDecoder(c.Request.Body).Decode(&body)
if err != nil {
    c.String(http.StatusServiceUnavailable, err.Error())
    return
}

请求体的内容如下:

{
    "param1": "1",
    "param2": "1",
    "param3": "1",
    "param4": "1"
}

你可以使用map[string]string来解析请求体中的参数。首先,你需要定义一个空的map,然后使用json.Decoder将请求体解码为map[string]interface{}类型。接下来,你可以遍历解码后的map,将键和值转换为字符串,并将它们存储到新的map[string]string中。以下是示例代码:

params := make(map[string]string)
err := json.NewDecoder(c.Request.Body).Decode(&params)
if err != nil {
    c.String(http.StatusServiceUnavailable, err.Error())
    return
}

// 将解析后的参数打印出来
for key, value := range params {
    fmt.Println(key, value)
}

希望对你有帮助!

英文:

How to parse parameters from POST body to map[string] string?

I am using gin and I can parse to predefined structure but in this case I don't know key names.
( I can when I know key names but when I don't know is a problem )

type Body struct {
	Name    string
	Email   string
}

body := Body{}
err := json.NewDecoder( c.Request.Body ).Decode( &body )
if err != nil {
	c.String( http.StatusServiceUnavailable, err.Error() )
	return
}

The body looks like this:

{ 
"param1": "1", 
"param2": "1", 
"param3": "1", 
"param4": "1" 
}

答案1

得分: 4

请尝试这个:

package main

import (
	"fmt"
	"encoding/json"
)


func main() {
	j := `{"foo": "aa", "baz": "bb", "qux": "cc"}`
	byt := []byte(j)
		
	var dat map[string]string	
	
	if err := json.Unmarshal(byt, &dat); err != nil {
		panic(err)
	}
	fmt.Println(dat)
}

输出结果:

map[qux:cc foo:aa baz:bb]

Go Playground

英文:

Try this:

package main

import (
	"fmt"
	"encoding/json"
)


func main() {
	j := `{"foo": "aa", "baz": "bb", "qux": "cc"}`
	byt := []byte(j)
		
	var dat map[string]string	
	
	if err := json.Unmarshal(byt, &dat); err != nil {
        	panic(err)
	}
	fmt.Println(dat)
}

Output:

map[qux:cc foo:aa baz:bb]

<kbd>Go Playground</kbd>

huangapple
  • 本文由 发表于 2015年6月11日 20:34:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/30780924.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定