Mon serveur websocket recevra et annulera les données JSON. Ces données seront toujours enveloppées dans un objet avec des paires clé / valeur. La chaîne de clé agira comme identificateur de valeur, indiquant au serveur Go de quel type de valeur il s'agit. En connaissant le type de valeur, je peux ensuite procéder à la décompression JSON de la valeur dans le type de structure correct.
Chaque objet json peut contenir plusieurs paires clé / valeur.
Exemple JSON:
{
"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},
"say":"Hello"
}
Existe-t-il un moyen simple d'utiliser le "encoding/json"
package pour ce faire?
package main
import (
"encoding/json"
"fmt"
)
// the struct for the value of a "sendMsg"-command
type sendMsg struct {
user string
msg string
}
// The type for the value of a "say"-command
type say string
func main(){
data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`)
// This won't work because json.MapObject([]byte) doesn't exist
objmap, err := json.MapObject(data)
// This is what I wish the objmap to contain
//var objmap = map[string][]byte {
// "sendMsg": []byte(`{"user":"ANisus","msg":"Trying to send a message"}`),
// "say": []byte(`"hello"`),
//}
fmt.Printf("%v", objmap)
}
Merci pour tout type de suggestion / aide!
RawMessage
. Exactement ce dont j'avais besoin. À propossay
, je le veux toujours tel queljson.RawMessage
, car la chaîne n'est toujours pas décodée (caractères enveloppants"
et échappés\n
, etc.), je vais donc la démarseler aussi.Suite à la réponse de Stephen Weinberg, j'ai depuis implémenté un outil pratique appelé iojson , qui permet de renseigner facilement les données d'un objet existant et d'encoder l'objet existant en une chaîne JSON. Un middleware iojson est également fourni pour fonctionner avec d'autres middlewares. Plus d'exemples peuvent être trouvés sur https://github.com/junhsieh/iojson
Exemple:
Exemple de sortie:
la source
Voici une manière élégante de faire la même chose. Mais pourquoi en partie JSON unmarshal? Cela n'a pas de sens.
Regardez ci-dessous le code de travail. Copiez et collez-le.
Aller au terrain de jeu
la source