Maison > développement back-end > Golang > le corps du texte

Obtenez des paires clé-valeur imbriquées de la requête x-www-form-urlencoded au format JSON dans Golang

王林
Libérer: 2024-02-09 15:15:08
avant
493 Les gens l'ont consulté

Obtenez des paires clé-valeur imbriquées de la requête x-www-form-urlencoded au format JSON dans Golang

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.

Contenu de la question

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&notes[key1]=value1&notes[key2]=value2

J'ai essayé url.parsequery("name=abc&age=12&notes[key1]=value1&notes[key2]=value2") mais ça a donné

{
  "name": "abc",
  "age": 12,
  "notes[key1]": "value1",
  "notes[key2]": "value2"
}
Copier après la connexion

Comment obtenir la valeur au format json suivant pour le texte ci-dessus

{
  "name": "abc",
  "age": 12,
  "notes": {
    "key1": "value1",
    "key2": "value2"
  }
}
Copier après la connexion

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.parsequeryr.form 但它们都给出了 notes[key1]notes[key2]

解决方法

要使用这种类型的查询字符串参数名称解​​组嵌套键值,可以使用 derekstavis/go -qsSolution 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 -qsmap[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"
  }
}
Copier après la connexion
Un exemple complet est disponible sur le Go Playground, le code est le suivant :

aller au terrain de jeu 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&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))
}
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal