在 go gin 中将原始字符串解析为 golang 结构

Parsing a raw string int a golang struct in go gin

我有来自 text/plain 请求的数据,格式如下:

machine_id=XXX&v_k=44&v_dr=4.0&v_total=44.9&message="Idle Data"

如何在 golang 中将其解析为结构或 map[string]string

type Event struct {
    MachineID    string  `json:"machine_id"`
    Message      string  `json:"message"`
    VDr         float64 `json:"v_dr"`
    VKeg         float64 `json:"v_k"`
    VTotal       float64 `json:"v_total"`
}

我正在寻找相当于

jsonMap := make(map[string]interface{})
err = json.Unmarshal(body, &jsonMap)

var p Event
err := json.NewDecoder(c.Request.Body).Decode(&p)

如果原始字符串是 json 格式的。我无法将来自客户端的 Header 更改为 application/x-www-form-urlencoded 并将其作为表单处理。

url 包中的 ParseQuery 方法可以做到这一点,但需要注意的是,您在引号中的项目 message="Idle Data" 可能无法正确解析,这意味着您我想先打电话给 url.PathEscape

url.ParseQuery("machine_id=XXX&v_k=44&v_dr=4.0&v_total=44.9&message=Idle+Data"))

ParseQuery returns 一个 Values 类型,也就是 map[string][]string

不过,如果这是来自 HTTP 请求。 Request 对象有一个方法来处理查询字符串的解析。这是Parse Form

https://play.golang.org/p/NUvrXnsPM89