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!