"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-07
Parcourir:512

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 :

type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}

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

json.Unmarshal([]byte(jsonMsg), &msg)

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

Alternatives

  1. Double Unmarshal :

    • Tout d'abord, unmarshal 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. Unmarshal et conversion de type :

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

Considérations

Les trois solutions sont valides, 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3