Maison >développement back-end >Golang >Comment analyser efficacement des structures JSON complexes en Go à l'aide de « json.Unmarshal » ?

Comment analyser efficacement des structures JSON complexes en Go à l'aide de « json.Unmarshal » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 13:41:43839parcourir

How to Effectively Parse Complex JSON Structures in Go Using `json.Unmarshal`?

Comment analyser un JSON complexe avec Go Unmarshal : dévoiler le fonctionnement interne

Le package encoding/json dans Go propose le json.Unmarshal fonction pour simplifier les tâches d’analyse JSON. Cependant, rencontrer des structures JSON complexes peut s'avérer difficile.

Décodage dans une interface{}

Pour les données JSON inconnues, on peut les décoder dans une interface{} à l'aide d'Unmarshal. . Cette approche aboutit à une valeur map[string]interface{} où les clés sont des chaînes et les valeurs sont des types interface{}.

Par exemple, considérons le JSON suivant :

{
     "k1" : "v1", 
     "k2" : "v2", 
     "k3" : 10, 
     "result" : [
                 [
                 ["v4", v5, {"k11" : "v11", "k22" : "v22"}]
                 , ... , 
                 ["v4", v5, {"k33" : "v33", "k44" : "v44"}
                 ]
                 ], 
                 "v3"
                ] 
}

The Go code pour décoder et accéder à ces données :

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    b := []byte(`{
       "k1" : "v1", 
       "k3" : 10,
       result:["v4",12.3,{"k11" : "v11", "k22" : "v22"}]
    }`)
    var f interface{}
    err := json.Unmarshal(b, &f)
    if err != nil {
        fmt.Println(err)
        return
    }
    m := f.(map[string]interface{})
    for k, v := range m {
        switch vv := v.(type) {
        case string:
            fmt.Println(k, "is string", vv)
        case int:
            fmt.Println(k, "is int", vv)
        case []interface{}:
            fmt.Println(k, "is an array:")
            for i, u := range vv {
                fmt.Println(i, u)
            }
        default:
            fmt.Println(k, "is of a type I don't know how to handle")
        }
    }
}

En affirmant le type d'interface et en utilisant un commutateur de type, il est possible de naviguer

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