Maison  >  Article  >  développement back-end  >  Comment analyser JSON avec des paires clé/valeur connues et inconnues dans une structure Go ?

Comment analyser JSON avec des paires clé/valeur connues et inconnues dans une structure Go ?

DDD
DDDoriginal
2024-10-28 02:13:30369parcourir

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

Démarrer JSON avec des paires clé/valeur arbitraires pour structurer

Problème

Comment puis-je analyser une chaîne JSON avec des paires clé/valeur connues et inconnues dans une structure Go ? Les champs inconnus peuvent avoir n'importe quel nom et type de valeur (string, bool, float64 ou int).

Solution

Créez une structure avec les champs connus et une tranche de cartes pour les champs inconnus :

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

Désorganisez la chaîne JSON dans cette structure :

<code class="go">json.Unmarshal([]byte(jsonMsg), &msg)</code>

Le champ Inconnus contiendra une liste de cartes représentant les paires clé/valeur inconnues.

Alternatives

  1. Double Unmarshal :

    • Tout d'abord, désorganisez-vous dans une structure temporaire contenant uniquement les champs connus.
    • Ensuite, désassemblez à nouveau dans une map[string]interface{} et extrayez les valeurs inconnues manuellement.
  2. Démarshal et conversion de type :

    • Unmarshal dans une interface map[string]{}.
    • Parcourez la carte et tapez affirmer les valeurs aux types appropriés.

Considérations

Les trois solutions sont valables, mais la plus simple et la plus élégante est l'approche initiale basée sur la structure. Cela évite le besoin de démaréchaux supplémentaires ou de conversions de type manuelles.

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