Go語言中的JSON(JavaScript Object Notation)操作是非常方便的。通常,JSON會以一個對象的形式被解析和序列化。但是,有時你想要解析JSON數(shù)據(jù)而無法確定數(shù)據(jù)結(jié)構(gòu)中的鍵。這時候,Go語言中的JSON包可以幫助你。
JSON包提供了一個Type別名為json.RawMessage的類型,它可以存儲任意的JSON。在你不確定JSON數(shù)據(jù)中的鍵的時候,你可以使用這個特殊的類型。為了演示這個類型,我們假設(shè)我們從外部系統(tǒng)獲取了以下的JSON數(shù)據(jù):
data := `[ { "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" } ]`
在我們沒有確定JSON數(shù)據(jù)中的鍵時,我們可以使用json.RawMessage類型來存儲數(shù)據(jù)。以下是一個使用json.RawMessage類型處理JSON數(shù)據(jù)的例子:
type User struct { ID int `json:"id"` Name string `json:"name"` } func main() { var data []json.RawMessage if err := json.Unmarshal([]byte(data), &data); err != nil { fmt.Println(err) } var users []User for _, rawMsg := range data { var user User if err := json.Unmarshal(rawMsg, &user); err != nil { fmt.Println(err) continue } users = append(users, user) } fmt.Printf("%+v", users) }
注意,我們使用了range關(guān)鍵字遍歷數(shù)據(jù)并在每次迭代中對JSON解析了一次。盡管這個例子很簡單,但我們可以利用json.RawMessage類型來處理更加復(fù)雜的JSON數(shù)據(jù)。
上一篇vue cil路由
下一篇html彈出QQ分享代碼