Maison  >  Article  >  développement back-end  >  Comment puis-je regrouper JSON avec des paires clé/valeur arbitraires dans une structure Go ?

Comment puis-je regrouper JSON avec des paires clé/valeur arbitraires dans une structure Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 06:45:28983parcourir

How Can I Unmarshal JSON with Arbitrary Key/Value Pairs into a Go Struct?

Démarshaling JSON avec des paires clé/valeur arbitraires vers une structure

Énoncé du problème

L'objectif est de démarshaler une chaîne JSON contenant un mélange de noms connus et des paires clé/valeur inconnues dans une structure Go. Les champs connus doivent être désorganisés en champs de structure spécifiques, tandis que les champs inconnus doivent être stockés sous la forme d'une collection de paires clé/valeur au sein de la structure.

Solution

Pour y parvenir, une structure peut être défini avec une combinaison de champs connus et une tranche de cartes :

<code class="go">type Message struct {
    Known1 string `json:"known1"`
    Known2 string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>

Processus de démarshaling

Cette chaîne JSON :

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>

peut être démarshalée à l'aide des éléments suivants étapes :

  1. Créez une instance de la structure Message.
  2. Désorganisez la chaîne JSON dans la structure.
  3. Parcourez l'objet JSON brut après le démarshalage et extrayez le clés et valeurs des champs inconnus.
  4. Stockez chaque paire clé/valeur inconnue dans une nouvelle carte et ajoutez-la au champ Inconnus dans la structure.

Solution alternative

Alternativement, au lieu d'utiliser une structure, le JSON peut être démarshalé directement dans une map[string]interface{}, qui donnera accès à toutes les paires clé/valeur sous forme de collection dynamique.

<code class="go">var msg map[string]interface{}
json.Unmarshal([]byte(jsonMsg), &msg)</code>

Conclusion

Le choix entre utiliser une structure ou une carte dépend des exigences spécifiques de l'application. Si des champs connus prédéfinis et une approche structurée sont souhaités, une structure convient. Si la nature exacte des champs inconnus n'est pas connue à l'avance, ou si une structure de données dynamique plus flexible est requise, une carte est une option viable.

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!

Déclaration:
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