Maison  >  Article  >  développement back-end  >  Comment puis-je accéder à des clés et valeurs JSON profondément imbriquées dans Go sans utiliser de marshaleurs et de démarshaleurs personnalisés ?

Comment puis-je accéder à des clés et valeurs JSON profondément imbriquées dans Go sans utiliser de marshaleurs et de démarshaleurs personnalisés ?

DDD
DDDoriginal
2024-10-26 19:41:02412parcourir

How can I access deeply nested JSON keys and values in Go without using custom marshalers and unmarshalers?

Accès aux clés et valeurs JSON profondément imbriquées dans Go

Considérez le code client websocket suivant écrit en Go :

import (
    "encoding/json"
    "log"
)

func main() {
    msg := `{"args":[{"time":"2013-05-21 16:56:16", "tzs":[{"name":"GMT"}]}],"name":"send:time"}`
    var u map[string]interface{}

    err := json.Unmarshal([]byte(msg), &u)
    if err != nil {
        log.Fatalf("Failed to unmarshal: %v\n", err)
    }

    args := u["args"]

    // Attempting to directly access the time key will throw an error
    log.Println(args[0]["time"]) // invalid notation
}

Dans ce scénario, l'erreur « opération invalide : args[0] (index de type interface {}) » se produit en raison d'une notation incorrecte lors de l'accès à la clé « time » profondément imbriquée.

Solution

Une solution recommandée consiste à utiliser le package github.com/bitly/go-simplejson, qui simplifie la navigation dans les structures de données JSON. Reportez-vous à la documentation sur http://godoc.org/github.com/bitly/go-simplejson pour plus de détails.

Application de ce package au code ci-dessus :

// Import go-simplejson
import "github.com/bitly/go-simplejson"

func main() {
    // Create a JSON object
    json := simplejson.New()
    json.Decode([]byte(msg))

    // Using go-simplejson, access the time key
    time, err := json.Get("args").GetIndex(0).String("time")
    if err != nil {
        log.Fatalf("Failed to get time: %v\n", err)
    }

    log.Println(time) // Returns the time value
}

Concernant le deuxième partie de la question d'origine, déclarer une structure Go nécessiterait des marshaleurs et des démarshalers personnalisés, ce qui implique l'implémentation des interfaces encoding.TextMarshaler et encoding.TextUnmarshaler. Cependant, l'utilisation d'une bibliothèque JSON comme go-simplejson simplifie ce processus.

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