Server websocket saya akan menerima dan membuka data JSON. Data ini akan selalu dibungkus dalam objek dengan pasangan kunci / nilai. Key-string akan bertindak sebagai pengenal nilai, memberi tahu server Go tentang jenis nilainya. Dengan mengetahui jenis nilai apa, saya kemudian dapat melanjutkan ke JSON menguraikan nilai ke dalam jenis struct yang benar.
Setiap json-object mungkin berisi beberapa pasangan kunci / nilai.
Contoh JSON:
{
"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},
"say":"Hello"
}
Apakah ada cara mudah menggunakan "encoding/json"
paket untuk melakukan ini?
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)
}
Terima kasih atas saran / bantuan apa pun!
RawMessage
. Persis yang saya butuhkan. Tentangsay
, saya sebenarnya masih menginginkannya sebagaijson.RawMessage
, karena string masih belum didekodekan (membungkus"
dan melarikan diri\n
-karakter, dll), jadi saya akan membatalkannya juga.Lebih jauh ke jawaban Stephen Weinberg, saya telah menerapkan alat praktis yang disebut iojson , yang membantu untuk mengisi data ke objek yang ada dengan mudah serta mengkodekan objek yang ada ke string JSON. Sebuah middleware iojson juga disediakan untuk bekerja dengan middleware lain. Contoh lainnya dapat ditemukan di https://github.com/junhsieh/iojson
Contoh:
Output sampel:
sumber
Inilah cara elegan untuk melakukan hal serupa. Tetapi mengapa sebagian JSON tidak dapat dipercaya? Itu tidak masuk akal.
Lihat di bawah kode kerja. Salin dan tempel.
Pergilah bermain
sumber