Maison >développement back-end >Golang >Comment débloquer des structures JSON inattendues dans Go ?

Comment débloquer des structures JSON inattendues dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 12:11:15929parcourir

How to Unmarshal Unexpected JSON Structures in Go?

Démarshaling de données JSON de format inconnu

Face à des données JSON qui possèdent une structure imprévisible et des clés variables, cela présente le défi de démarshaler dans des structures Go. Cet article explique comment gérer efficacement de tels scénarios.

Solution

Pour résoudre ce problème, deux approches sont recommandées :

Approche 1 : Utiliser une variable Map

Lorsque les clés sont inconnues, l'utilisation d'une variable map[string]interface{} est une option appropriée pour décomplexer la charge utile JSON.

var grades map[string]interface{}

err := json.Unmarshal([]byte(jsonString), &grades)

Ici, la variable cartographique « notes » contiendra les données non marshalées, où les clés représentent les noms de sujets inconnus, et les valeurs sont des cartes composées des noms des étudiants et de leurs notes.

Approche 2 : Ignorer les clés inconnues avec la balise JSON

Si une structure est préférable, elle peut être annotée avec la balise json:"-" pour ignorer des champs spécifiques lors du marshaling et du démarshaling JSON. Cela permet à la structure de conserver les données non marshalées tout en excluant les clés inconnues.

type GradeData struct {
    Grades map[string]interface{} `json:"-"`
}

var gradesData GradeData
err := json.Unmarshal([]byte(jsonString), &gradesData.Grades)

Dans ce cas, la structure "GradeData" contient uniquement le champ "Notes", qui est une carte des noms de sujets et des étudiants. notes, mais les noms de clés d'origine du JSON ne sont pas présents. La balise JSON garantit que les champs de la structure s'alignent sur le format de sortie souhaité.

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