原文地址:https://blog.csdn.net/benben_2015/article/details/81119804git
jsonparser github地址:https://github.com/buger/jsonparsergithub
上一篇golang读取json配置文件介绍了使用encoding/json
包来解析json文件,可是这种方法在面对结构复杂、字段较多的状况时,解析效率不是很高。上一篇中,咱们在解析json文件时,须要提早在代码中定义好解析后对应的结构体,比较麻烦。而今天的主角jsonparser
不须要你了解载入文件的结构,容许你经过提供它们的路径来访问。它能够快速的提取json内容,比encoding/json
包的速度高出10倍左右。 jsonparser
之因此有如此快的速度,缘由有以下几个方面:golang
encoding/json
,reflection
或者interface{}
,惟一依赖包是bytes
;经过下面的代码来了解下它的使用。json
package main import ( "github.com/buger/jsonparser" "fmt" ) 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") }
参考文章数据结构