首頁 >後端開發 >Golang >在golang中取得JSON格式的x-www-form-urlencoded請求的巢狀鍵值對

在golang中取得JSON格式的x-www-form-urlencoded請求的巢狀鍵值對

王林
王林轉載
2024-02-09 15:15:08529瀏覽

在golang中取得JSON格式的x-www-form-urlencoded請求的巢狀鍵值對

在golang中,處理JSON格式的x-www-form-urlencoded請求時,有時候會遇到巢狀的鍵值對。 php小編百草為大家提供了解決方案。透過使用json.Unmarshal函數將請求的body解析成map[string]interface{}類型,然後透過類型斷言和類型轉換來取得巢狀鍵值對的值。這種方法簡單有效,可以幫助開發者輕鬆處理這類請求。接下來,我們將詳細介紹具體的實作步驟。

問題內容

我有一個用例,我們在 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://www.php.cn/link/0fc780bb04e74ce5ed154d2e49cfe2fd

###
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請求的巢狀鍵值對的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除