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.Nach Stephen Weinbergs Antwort habe ich seitdem ein praktisches Tool namens iojson implementiert , mit dem Daten einfach in ein vorhandenes Objekt eingefügt und das vorhandene Objekt in eine JSON-Zeichenfolge codiert werden kann. Eine iojson-Middleware wird auch für die Arbeit mit anderen Middlewares bereitgestellt. Weitere Beispiele finden Sie unter https://github.com/junhsieh/iojson
Beispiel:
Beispielausgabe:
quelle
Hier ist eine elegante Möglichkeit, ähnliche Dinge zu tun. Aber warum entlarvt JSON teilweise? Das macht keinen Sinn.
Schauen Sie sich unten den Arbeitscode an. Kopieren Sie es und fügen Sie es ein.
Geh auf den Spielplatz
quelle