在Go 中將JSON 數據解析為Map
Websocket 伺服器經常接收包裝在鍵值對中的JSON 數據,這些數據指示值的類型。雖然「encoding/json」套件提供了方便的解組功能,但需要將 JSON 資料部分解析為映射以進行進一步處理。
使用 map[string]json.RawMessage 的方法
要實現部分解組,可以使用 map[string]json.RawMessage。這種方法允許將 JSON 資料解組到映射中,鍵是屬性名稱,值是未解析的 JSON 資料。
import ( "encoding/json" "fmt" ) func main() { data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`) var objmap map[string]json.RawMessage err := json.Unmarshal(data, &objmap) if err != nil { fmt.Printf("Error unmarshaling JSON: %v", err) return } // Unpack Individual Values // Parsing sendMsg var s sendMsg err = json.Unmarshal(objmap["sendMsg"], &s) if err != nil { fmt.Printf("Error unmarshaling 'sendMsg': %v", err) return } fmt.Println("sendMsg:", s) // Parsing say var str string err = json.Unmarshal(objmap["say"], &str) if err != nil { fmt.Printf("Error unmarshaling 'say': %v", err) return } fmt.Println("say:", str) } type sendMsg struct { User string Msg string }
在這個方法中,objmap 將包含一個鍵「sendMsg」 " 其值是表示sendMsg 物件的原始JSON 資料。透過進一步將此資料解組到sendMsg 結構中,可以存取各個字段(User 和Msg)。為了確保成功解組,請記住匯出 sendMsg 結構中的欄位(即使用者和訊息)。
以上是如何在 Go 中高效解析部分 JSON 映射?的詳細內容。更多資訊請關注PHP中文網其他相關文章!