天天看點

【golang】json資料解析 - 嵌套json解析

文章目錄

  • ​​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])