- 引入包
encoding/json
// 序列化 func Marshal(v interface{}) ([]byte, error) {} // 反序列化 func Unmarshal(data []byte, v interface{}) error {} // func NewDecoder(r io.Reader) *Decoder {} Decoder.Decode(&map) // NewEncoder 需要传入一个 io func NewEncoder(w io.Writer) *Encoder {} Encoder.Encode(struct)
- 具体代码如下
resp, err := http.Get("http://json.aaa.com/test") // 假的,自己可以找一个接口测试
if err != nil {
fmt.Println(err)
fmt.Println("http.Get error")
return
}
fmt.Println(resp)
//data, err := ioutil.ReadAll(resp.Body) // 可以通过 ioutil.ReadAll 方法 获取 接口返回的数据
//if err != nil {
// fmt.Println(err)
// fmt.Println("curl 请求失败")
// return
//}
//fmt.Println("Body is :",string(data))
var json_map map[string]interface{} // 声明一个 map 便于解析 数据 进去
decoder := json.NewDecoder(resp.Body)
decoder.Decode(&json_map)
for k, v := range json_map {
fmt.Printf("json_map[%v] : %v, type - '%v'\n", k, v, reflect.TypeOf(v))
}
for k, v := range json_map["data"].([]interface{}) { // 我测试的接口 data 是一个[]map[string]interface{}
a := v.(map[string]interface{}) // 采用断言 把 interface{} 类型转换下 便于 range
for kk, vv := range a {
fmt.Printf("data[%d]['%s']:%v\n", k, kk, vv)
}
}
可以看下我的 go简单的http_server, 里面有简单的获取 get post json 数据处理示例, 希望能帮助到您