Maison >développement back-end >Golang >Comment analyser efficacement partiellement une carte JSON dans Go ?

Comment analyser efficacement partiellement une carte JSON dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 07:45:09255parcourir

How to Efficiently Parse Partially a JSON Map in Go?

Analyse des données JSON dans une carte dans Go

Les serveurs Websocket reçoivent souvent des données JSON enveloppées dans des paires clé-valeur qui indiquent le type de valeur . Bien que le package « encoding/json » offre des capacités de démarshalling pratiques, il est nécessaire d'analyser partiellement les données JSON dans une carte pour un traitement ultérieur.

Approche utilisant une map[string]json.RawMessage

Pour réaliser un démarshalling partiel, on peut utiliser un map[string]json.RawMessage. Cette approche permet aux données JSON d'être désorganisées dans une carte, les clés étant les noms de propriétés et les valeurs étant les données JSON non analysées.

import (
    "encoding/json"
    "fmt"
)

func main() {
    data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`)

    var objmap map[string]json.RawMessage
    err := json.Unmarshal(data, &objmap)
    if err != nil {
        fmt.Printf("Error unmarshaling JSON: %v", err)
        return
    }

    // Unpack Individual Values

    // Parsing sendMsg
    var s sendMsg
    err = json.Unmarshal(objmap["sendMsg"], &s)
    if err != nil {
        fmt.Printf("Error unmarshaling 'sendMsg': %v", err)
        return
    }
    fmt.Println("sendMsg:", s)

    // Parsing say
    var str string
    err = json.Unmarshal(objmap["say"], &str)
    if err != nil {
        fmt.Printf("Error unmarshaling 'say': %v", err)
        return
    }
    fmt.Println("say:", str)
}

type sendMsg struct {
    User string
    Msg  string
}

Dans cette approche, l'objmap contiendra une clé "sendMsg " avec une valeur qui correspond aux données JSON brutes représentant l'objet sendMsg. En décomposant davantage ces données dans une structure sendMsg, les champs individuels (Utilisateur et Msg) sont accessibles.

Remarque : Pour garantir une désorganisation réussie, n'oubliez pas d'exporter les champs dans la structure sendMsg. (c'est-à-dire, utilisateur et message).

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