Dans Golang, lors du traitement de requêtes x-www-form-urlencoded au format JSON, vous rencontrez parfois des paires clé-valeur imbriquées. L'éditeur PHP Baicao propose une solution pour tout le monde. En utilisant la fonction json.Unmarshal pour analyser le corps de la requête en type map[string]interface{}, puis obtenir la valeur de la paire clé-valeur imbriquée via l'assertion de type et la conversion de type. Cette méthode est simple et efficace et peut aider les développeurs à traiter facilement ces demandes. Ensuite, nous présenterons en détail les étapes spécifiques de mise en œuvre.
J'ai un cas d'utilisation dans lequel nous obtenons des valeurs clés imbriquées dans x-www-form-urlencoded
corps comme indiqué ci-dessous
name=abc&age=12¬es[key1]=value1¬es[key2]=value2
J'ai essayé url.parsequery("name=abc&age=12¬es[key1]=value1¬es[key2]=value2")
mais ça a donné
{ "name": "abc", "age": 12, "notes[key1]": "value1", "notes[key2]": "value2" }
Comment obtenir la valeur au format json suivant pour le texte ci-dessus
{ "name": "abc", "age": 12, "notes": { "key1": "value1", "key2": "value2" } }
Les commentaires peuvent être au format imbriqué sur 3 niveaux
J'ai essayé url.parsequery
et r.form
mais ils donnent tous les deux notes[key1]
et notes[key2] </code >. <code>url.parsequery
和 r.form
但它们都给出了 notes[key1]
和 notes[key2]
。
要使用这种类型的查询字符串参数名称解组嵌套键值,可以使用 derekstavis/go -qs
Solution de contournement
Pour désassembler les valeurs de clés imbriquées à l'aide de ce type de nom de paramètre de chaîne de requête, vous pouvez utiliser derekstavis/go -qs
map[string]interface{}
Il s'agit d'un portage de l'analyseur de chaîne de requête rack.
Cela renvoie un age
的值作为字符串返回,但是,这对于 url.parsequery
avec les valeurs clés imbriquées suivantes.
Il convient de noter que
est la même chose. Ce package peut être dupliqué et modifié s'il doit être marshalé en entiers.
{ "age": "12", "name": "abc", "notes": { "key1": "value1", "key2": "value2" } }
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)) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!