Máy chủ websocket của tôi sẽ nhận và xử lý dữ liệu JSON. Dữ liệu này sẽ luôn được bao bọc trong một đối tượng với các cặp khóa / giá trị. Chuỗi khóa sẽ hoạt động như một mã định danh giá trị, cho máy chủ Go biết nó là loại giá trị nào. Bằng cách biết loại giá trị nào, sau đó tôi có thể tiến hành JSON bỏ quản lý giá trị thành loại cấu trúc chính xác.
Mỗi json-object có thể chứa nhiều cặp khóa / giá trị.
JSON mẫu:
{
"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},
"say":"Hello"
}
Có cách nào dễ dàng sử dụng "encoding/json"
gói để thực hiện việc này không?
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)
}
Cảm ơn vì bất kỳ loại gợi ý / giúp đỡ!
RawMessage
. Chính xác những gì tôi cần. Về phầnsay
, tôi thực sự vẫn muốn nó như vậyjson.RawMessage
, bởi vì chuỗi vẫn chưa được giải mã ( ký tự gói"
và thoát\n
, v.v.), vì vậy tôi cũng sẽ bỏ quản lý nó.