


Get nested key-value pairs of x-www-form-urlencoded request in JSON format in golang
In golang, when processing x-www-form-urlencoded requests in JSON format, you sometimes encounter nested key-value pairs. PHP editor Baicao provides a solution for everyone. By using the json.Unmarshal function to parse the request body into map[string]interface{} type, and then obtain the value of the nested key-value pair through type assertion and type conversion. This method is simple and effective and can help developers handle such requests easily. Next, we will introduce the specific implementation steps in detail.
Question content
I have a use case where we get the nested key value in the x-www-form-urlencoded
body as shown below
name=abc&age=12¬es[key1]=value1¬es[key2]=value2
I tried url.parsequery("name=abc&age=12¬es\[key1\]=value1¬es\[key2\]=value2")
but it gives
{ "name": "abc", "age": 12, "notes[key1]": "value1", "notes[key2]": "value2" }
How to get the value in the following json format for the above text
{ "name": "abc", "age": 12, "notes": { "key1": "value1", "key2": "value2" } }
Comments may be in 3-level nested format
I have tried url.parsequery
and r.form
but they both give notes[key1]
and notes[key2]
.
Workaround
To unmarshal nested key values using this type of query string parameter name, you can use derekstavis/go -qs
This is the port of the rack query string parser.
This will return a map[string]interface{}
with the following nested key values.
It is worth noting that the value of age
is returned as a string, however, this is the same for url.parsequery
. This package can be forked and modified if it needs to be marshaled into integers.
{ "age": "12", "name": "abc", "notes": { "key1": "value1", "key2": "value2" } }
A complete example is provided on the go playground, the code is as follows:
go playground URL: 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)) }
The above is the detailed content of Get nested key-value pairs of x-www-form-urlencoded request in JSON format in golang. For more information, please follow other related articles on the PHP Chinese website!

In Go programming, ways to effectively manage errors include: 1) using error values instead of exceptions, 2) using error wrapping techniques, 3) defining custom error types, 4) reusing error values for performance, 5) using panic and recovery with caution, 6) ensuring that error messages are clear and consistent, 7) recording error handling strategies, 8) treating errors as first-class citizens, 9) using error channels to handle asynchronous errors. These practices and patterns help write more robust, maintainable and efficient code.

Implementing concurrency in Go can be achieved by using goroutines and channels. 1) Use goroutines to perform tasks in parallel, such as enjoying music and observing friends at the same time in the example. 2) Securely transfer data between goroutines through channels, such as producer and consumer models. 3) Avoid excessive use of goroutines and deadlocks, and design the system reasonably to optimize concurrent programs.

Gooffersmultipleapproachesforbuildingconcurrentdatastructures,includingmutexes,channels,andatomicoperations.1)Mutexesprovidesimplethreadsafetybutcancauseperformancebottlenecks.2)Channelsofferscalabilitybutmayblockiffullorempty.3)Atomicoperationsareef

Go'serrorhandlingisexplicit,treatingerrorsasreturnedvaluesratherthanexceptions,unlikePythonandJava.1)Go'sapproachensureserrorawarenessbutcanleadtoverbosecode.2)PythonandJavauseexceptionsforcleanercodebutmaymisserrors.3)Go'smethodpromotesrobustnessand

WhentestingGocodewithinitfunctions,useexplicitsetupfunctionsorseparatetestfilestoavoiddependencyoninitfunctionsideeffects.1)Useexplicitsetupfunctionstocontrolglobalvariableinitialization.2)Createseparatetestfilestobypassinitfunctionsandsetupthetesten

Go'serrorhandlingreturnserrorsasvalues,unlikeJavaandPythonwhichuseexceptions.1)Go'smethodensuresexpliciterrorhandling,promotingrobustcodebutincreasingverbosity.2)JavaandPython'sexceptionsallowforcleanercodebutcanleadtooverlookederrorsifnotmanagedcare

AneffectiveinterfaceinGoisminimal,clear,andpromotesloosecoupling.1)Minimizetheinterfaceforflexibilityandeaseofimplementation.2)Useinterfacesforabstractiontoswapimplementationswithoutchangingcallingcode.3)Designfortestabilitybyusinginterfacestomockdep

Centralized error handling can improve the readability and maintainability of code in Go language. Its implementation methods and advantages include: 1. Separate error handling logic from business logic and simplify code. 2. Ensure the consistency of error handling by centrally handling. 3. Use defer and recover to capture and process panics to enhance program robustness.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

Notepad++7.3.1
Easy-to-use and free code editor

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool
