GO 爬虫抓取json 怎么解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
package main import ( "fmt" // 输出标准库 "github.com/levigross/grequests" // HTTP 请求库 "github.com/tidwall/gjson" // 解析 json 库 ) func main() { url := "https://www.lagou.com/lbs/getAllCitySearchLabels.json" resp,_ := grequests.Get(url,nil) // 请求目标网址 body:= resp.String() // 转换成 string 类型 if !gjson.Valid(body){ fmt.Println("Json is Erro") } datas := gjson.Get(resp.String(),"content").Get("data").Get("allCitySearchLabels") for _,v := range datas.Map(){ fmt.Println(v) for i, vData := range v.Array(){ fmt.Println(i, vData) } } } |
输出如下:

另外一个模块 jsonparser
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package main import ( "fmt" "github.com/buger/jsonparser" ) func main() { data := []byte(`{ "person": { "name":{ "first": "Leonid", "last": "Bugaev", "fullName": "Leonid Bugaev" }, "github": { "handle": "buger", "followers": 109 }, "avatars": [ { "url": "https://avatars1.githubusercontent.com/u/14009?v=3&s=460", "type": "thumbnail" } ] }, "company": { "name": "Acme" } }`) result, err := jsonparser.GetString(data, "person", "name", "fullName") if err != nil { fmt.Println(err) } fmt.Println(result) content, valueType, offset, err := jsonparser.Get(data, "person", "name", "fullName") if err != nil { fmt.Println(err) } fmt.Println(content, valueType, offset) //jsonparser提供了解析bool、string、float64以及int64类型的方法,至于其他类型,我们可以通过valueType类型来自己进行转化 result1, err := jsonparser.ParseString(content) if err != nil { fmt.Println(err) } fmt.Println(result1) err = jsonparser.ObjectEach(data, func(key []byte, value []byte, dataType jsonparser.ValueType, offset int) error { fmt.Printf("key:%s\n value:%s\n Type:%s\n", string(key), string(value), dataType) return nil }, "person", "name") } |

