Mein Websocket-Server empfängt und marshallt JSON-Daten. Diese Daten werden immer in ein Objekt mit Schlüssel / Wert-Paaren eingeschlossen. Die Schlüsselzeichenfolge fungiert als Wertkennung und teilt dem Go-Server mit, um welche Art von Wert es sich handelt. Wenn ich weiß, welcher Werttyp vorhanden ist, kann ich mit JSON fortfahren, um den Wert in den richtigen Strukturtyp zu entpacken.
Jedes json-Objekt kann mehrere Schlüssel / Wert-Paare enthalten.
Beispiel JSON:
{
"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},
"say":"Hello"
}
Gibt es eine einfache Möglichkeit, das "encoding/json"
Paket zu verwenden, um dies zu tun?
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)
}
Vielen Dank für jede Art von Vorschlag / Hilfe!
RawMessage
. Genau das, was ich brauchte. Übersay
, ich möchte es eigentlich immer noch alsjson.RawMessage
, weil die Zeichenfolge immer noch nicht dekodiert ist (Wrapping"
und\n
Escape-Zeichen usw.), also werde ich es auch ausmarschieren.