Go處理JSON數(shù)據(jù)的實現(xiàn)
Go 處理 json數(shù)據(jù)主要就是使用 json 包下的 Marshal 和 UnMarshal 兩個函數(shù)。
定義結(jié)構(gòu)體 User
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Height float64 `json:"height"`
Hobbies []string `json:"hobbies"`
}
json 標(biāo)簽定義的名稱就是轉(zhuǎn)json時的key
1. 結(jié)構(gòu)體對象轉(zhuǎn) JSON 字符串
u := User{"張三", 19, 180.0, []string{"籃球", "跑步"}}
bytes, _ := json.Marshal(u) // Marshal函數(shù)轉(zhuǎn)成的是 byte 數(shù)組
jsonStr := string(bytes) // 通過類型轉(zhuǎn)換將字節(jié)數(shù)組轉(zhuǎn)成json字符串
fmt.Println(jsonStr)
打印結(jié)果如下:
{"name":"張三","age":19,"height":180,"hobbies":["籃球","跑步"]}
2. JSON 字符串轉(zhuǎn)結(jié)構(gòu)體對象
var u2 User // 定義結(jié)構(gòu)體變量接收
jsonStr := `{"name":"張三","age":19,"height":180,"hobbies":["籃球","跑步"]}`
_ = json.Unmarshal([]byte(jsonStr), &u2) // 相反地類型轉(zhuǎn)換將json字符串轉(zhuǎn)成字節(jié)數(shù)組后 再調(diào)用 json.Unmarshal 函數(shù)
fmt.Println(u2)
打印結(jié)果如下:
{張三 19 180 [籃球 跑步]}
3. 結(jié)構(gòu)體切片轉(zhuǎn)JSON字符串
和對象類型一樣,都是調(diào)用json包的 Marshal 方法
u1 := User{"張三", 19, 180.0, []string{"籃球", "跑步"}}
u2 := User{"李四", 18, 172.0, []string{"散步", "看書"}}
u3 := User{"王五", 20, 169.0, []string{"籃球", "爬山"}}
u4 := User{"趙六", 21, 158.0, []string{"乒乓球", "涉水"}}
// 定義切片
users := []User{u1, u2, u3, u4}
bytes, _ := json.Marshal(users)
jsonStr := string(bytes)
fmt.Println(jsonStr)
4. JSON字符串(JSON數(shù)組)轉(zhuǎn)切片
var users2 []User // 定義結(jié)構(gòu)體切片 _ = json.Unmarshal([]byte(jsonStr), &users2) // 將json數(shù)組(字符串)轉(zhuǎn)成結(jié)構(gòu)體切片 fmt.Println(users2)
參數(shù) jsonStr 就是3中轉(zhuǎn)成的json字符串
5. JSON 字符串轉(zhuǎn)Map,不需要定義結(jié)構(gòu)體
jsonStr := `{"name": "zhangsan", "age": 19}`
mp := make(map[string]interface{})
_ = json.Unmarshal([]byte(jsonStr), &mp)
fmt.Println(mp)
fmt.Println(mp["name"]) // zhangsan
// 遍歷map
for k, v := range mp {
fmt.Println(k, v)
}
到此這篇關(guān)于Go處理JSON數(shù)據(jù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)Go處理JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go-zero數(shù)據(jù)的流處理利器fx使用詳解
這篇文章主要為大家介紹了go-zero數(shù)據(jù)的流處理利器fx使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

