go生成和解析json结构是按结构体模式解析的,所以结构体类型一定要多练习熟悉。
完整代码(可以运行):
1// +build ignore 2package main 3 4import ( 5 "encoding/json" 6 "fmt" 7) 8 9type Person struct { 10 Name string 11 Age int 12} 13 14type Family struct { 15 Persons []Person 16} 17 18func main() { 19 // 根据结构体生成json 20 manJson := Person{ 21 Name: "Elinx", 22 Age: 26, 23 } 24 man, _ := json.Marshal(manJson) 25 fmt.Println(string(man)) 26 27 // 解析json到结构体 28 jsonStr := []byte(`{"Name":"Elinx","Age":26}`) 29 var man2 Person 30 json.Unmarshal(jsonStr, &man2) 31 fmt.Println(man2) 32 33 // 解析json数组到切片(数组) 34 jsonArrStr := []byte(`[{"Name":"Elinx","Age":26}, {"Name":"Twinkle","Age":21}]`) 35 var jsonSlice []map[string]interface{} 36 37 json.Unmarshal(jsonArrStr, &jsonSlice) 38 fmt.Println(jsonSlice) 39 40 // 解析多维数组 41 var f Family 42 43 // 模拟传输的Json数据 44 familyJSON := `{"Persons": [{"Name":"Elinx","Age":26}, {"Name":"Twinkle","Age":21}] }` 45 46 fmt.Println("======================") 47 48 // 解析字符串为Json 49 json.Unmarshal([]byte(familyJSON), &f) 50 // 直接输出并不会展示全部层级,原因待考究 51 fmt.Println(f) 52 // 从新生成json字符串查看真实结构 53 jsons, _ := json.Marshal(f) 54 55 fmt.Println(string(jsons)) 56} 57
直接解析单键json
可以使用直接json转map结构
1// 直接解析json单key结构,不使用结构体 2uploadJSON := `{"xxxx": "test","zzzz": "1111111"}` 3var jsonSlice2 map[string]interface{} 4json.Unmarshal([]byte(uploadJSON), &jsonSlice2) 5fmt.Println(jsonSlice2)