色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

golang json解析

錢衛國1年前7瀏覽0評論

JSON是一種輕量級的數據交換格式,常用于前后端通訊和數據存儲。在golang中,內置了對JSON的支持,包括序列化和反序列化。

將golang的結構體序列化為JSON格式的數據,可以使用標準庫中的json.Marshal函數:

type User struct {
Name string
Age int
}
func main() {
user := User{"Tom", 20}
data, _ := json.Marshal(user)
fmt.Println(string(data)) // {"Name":"Tom", "Age":20}
}

json.Unmarshal函數可將JSON格式的數據反序列化為golang的結構體:

type User struct {
Name string
Age int
}
func main() {
jsonString := `{"Name":"Tom", "Age":20}`
var user User
json.Unmarshal([]byte(jsonString), &user)
fmt.Println(user.Name, user.Age) // Tom 20
}

使用標簽tag可以對結構體字段進行額外的描述,包括json格式化時的字段名和空值處理等:

type User struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
}
func main() {
user := User{"Tom", 20}
data, _ := json.Marshal(user)
fmt.Println(string(data)) // {"name":"Tom", "age":20}
}

在處理復雜的JSON數據時,可以使用map[string]interface{}或[]interface{}類型來表示JSON對象或數組:

func main() {
jsonString := `{
"name": "Tom",
"age": 20,
"hobbies": ["reading", "music"],
"address": {
"city": "Shanghai",
"street": "xx road"
}
}`
var data map[string]interface{}
json.Unmarshal([]byte(jsonString), &data)
fmt.Println(data["name"].(string)) // Tom
fmt.Println(data["hobbies"].([]interface{})) // [reading music]
fmt.Println(data["address"].(map[string]interface{})["city"].(string)) // Shanghai
}

需要注意的是,使用map[string]interface{}或[]interface{}類型進行JSON解析時,需要進行類型斷言,否則會引發panic。

總之,golang對JSON的支持十分強大和靈活,可滿足大部分的需求,同時也需要注意字段的標簽和類型斷言等。