在golang中,處理JSON格式的x-www-form-urlencoded請求時,有時候會遇到巢狀的鍵值對。 php小編百草為大家提供了解決方案。透過使用json.Unmarshal函數將請求的body解析成map[string]interface{}類型,然後透過類型斷言和類型轉換來取得巢狀鍵值對的值。這種方法簡單有效,可以幫助開發者輕鬆處理這類請求。接下來,我們將詳細介紹具體的實作步驟。
我有一個用例,我們在 x-www-form-urlencoded
主體中取得嵌套鍵值,如下所示
name=abc&age=12¬es[key1]=value1¬es[key2]=value2
我嘗試了 url.parsequery("name=abc&age=12¬es\[key1\]=value1¬es\[key2\]=value2")
但它給了
{ "name": "abc", "age": 12, "notes[key1]": "value1", "notes[key2]": "value2" }
如何為上述正文取得以下 json 格式的值
{ "name": "abc", "age": 12, "notes": { "key1": "value1", "key2": "value2" } }
註解可能採用 3 層巢狀格式
我試過url.parsequery
和r.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¬es[key1]=value1¬es[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中文網其他相關文章!