文章目錄
- 1. 通過結構體映射解析
- 2. 嵌套json解析-map
1. 通過結構體映射解析
原資料結構
// 結構體
type contractJson struct {
Data []transaction `json:"data"`
Total int `json:"total"`
}
// data下的數組
type transaction struct {
Result string `json:"result"`
OwnerAddress string `json:"ownerAddress"`
}
// rs是http請求傳回的資料
rs := string(body)
if rs == "" {
return nil
}
contractJson1 := contractJson{}
err := json.Unmarshal([]byte(rs), &contractJson1)
if err != nil {
log.Fatal(err)
}
fmt.Println(contractJson1.Data[1])
2. 嵌套json解析-map
// http請求傳回的json資料
result := SendHttp(urls, method, rawurl, cookie)
fmt.Println(result)
// 定義make(map[string]interface{})
r := make(map[string]interface{})
fmt.Println([]byte(result))
// 調用标準庫encoding/json的Unmarshal
// 将JSON資料(JSON以字元串形式表示)轉換成[]byte,并将資料加載到對象r的記憶體位址
json.Unmarshal([]byte(result), &r)
// r["data"]是讀取JSON最外層的key
// 如果嵌套JSON資料,則使用map[string]interface{}讀取下一層的JSON資料
// 如讀取key為data裡面嵌套的result:r["data"].(map[string]interface{})["result"]
// 如果JSON的某個key的資料以數組表示,則使用([]interface{})[index]讀取數組中某個資料。
// 如讀取key為result的第四個資料:r["data"].(map[string]interface{})["result"].([]interface{})[3]
fmt.Println(r["data"].(map[string]interface{})["result"].([]interface{})[3])