Maison > développement back-end > Golang > le corps du texte

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
Libérer: 2024-10-26 19:41:02
original
411 Les gens l'ont consulté

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!