Maison >développement back-end >Golang >Comment lire les fichiers JSON en tant qu'objets dans Go ?

Comment lire les fichiers JSON en tant qu'objets dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-15 00:57:02363parcourir

How Do You Read JSON Files as Objects in Go?

Lecture de fichiers JSON en tant qu'objet dans Go

Dans Go, vous pouvez rencontrer des difficultés lorsque vous essayez de lire un fichier JSON et de l'analyser comme un Objet JSON.

Échec Tentatives

Certaines tentatives infructueuses de lecture de fichiers JSON en tant qu'objets incluent :

  • Tentative 1 :
plan, _ := ioutil.ReadFile(filename) // filename is the JSON file to read
var data interface{}
err := json.Unmarshal(plan, data)

Cela entraîne l'erreur "json : Unmarshal(nil)".

  • Tentative 2 :
generatePlan, _ := json.MarshalIndent(plan, "", " ") // plan is a pointer to a struct

Cela produit une sortie de chaîne, mais sa conversion en chaîne la rend impossible de parcourir en boucle en JSON object.

Solution

La clé pour résoudre ce problème réside dans la valeur indiquée par json.Unmarshal. Il doit s'agir d'un pointeur.

plan, _ := ioutil.ReadFile(filename)
var data interface{}
err := json.Unmarshal(plan, &data)

Assertion de type

Lorsque vous utilisez une interface vide dans unmarshal, vous devez utiliser l'assertion de type pour obtenir les valeurs sous-jacentes en tant que Go natif types :

bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null

Meilleur Pratique

Il est fortement recommandé d'utiliser une structure concrète pour remplir les données JSON à l'aide d'Unmarshal. Cela offre une meilleure clarté et évite le besoin d'assertions de type.

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