Mój serwer Websocket będzie odbierał i nierzeczywiste dane JSON. Te dane będą zawsze opakowane w obiekt z parami klucz / wartość. Ciąg klucza będzie działał jako identyfikator wartości, informując serwer Go o rodzaju wartości. Wiedząc, jaki typ wartości, mogę następnie przejść do JSON, aby usunąć wartość do odpowiedniego typu struktury.
Każdy obiekt json może zawierać wiele par klucz / wartość.
Przykład JSON:
{
"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},
"say":"Hello"
}
Czy można "encoding/json"
to zrobić w łatwy sposób ?
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)
}
Dzięki za wszelkiego rodzaju sugestie / pomoc!
RawMessage
. Dokładnie to, czego potrzebowałem. Osay
, właściwie nadal chcę tego jakojson.RawMessage
, ponieważ ciąg nadal nie jest dekodowany (zawijanie"
i\n
znaki ucieczki itp.), Więc też go cofnę.W nawiązaniu do odpowiedzi Stephena Weinberga, od tego czasu zaimplementowałem poręczne narzędzie o nazwie iojson , które pomaga w łatwym wypełnianiu danych do istniejącego obiektu, a także w kodowaniu istniejącego obiektu do łańcucha JSON. Udostępniono również oprogramowanie pośredniczące iojson do współpracy z innymi programami pośredniczącymi. Więcej przykładów można znaleźć pod adresem https://github.com/junhsieh/iojson
Przykład:
Przykładowe dane wyjściowe:
źródło
Oto elegancki sposób na zrobienie podobnej rzeczy. Ale dlaczego częściowo JSON jest nieważny? To nie ma sensu.
Spójrz poniżej na działający kod. Skopiuj i wklej.
Idź na plac zabaw
źródło