gjson
特点:
- 支持数据层级检索;
- 支持运行时数据修改;
- 支持
JSON
、XML
、YAML/YML
、TOML
、Struct
数据格式相互转换;
使用方式:
https://godoc.org/github.com/gogf/gf/encoding/gjson
data :=
`{
"users" : {
"count" : 100,
"list" : [
{"name" : "小明", "score" : 60},
{"name" : "John", "score" : 99.5}
]
}
}`
if j, err := gjson.DecodeToJson([]byte(data)); err != nil {
glog.Error(err)
} else {
fmt.Println("John Score:", j.GetFloat32("users.list.1.score"))
可以看到,gjson.Json
对象可以通过非常灵活的层级筛选功能(j.GetFloat32("users.list.1.score")
)检索到对应的变量信息。这是gjson
包的一大特色。
`{
"users" : {
"count" : 100
}
}`
if j, err := gjson.DecodeToJson([]byte(data)); err != nil {
glog.Error(err)
} else {
j.Set("users.count", 2)
j.Set("users.list", []string{"John", "小明"})
c, _ := j.ToJson()
fmt.Println(string(c))
}
执行后输出结果为:
当JSON
数据通过gjson
包读取后,可以通过Set
方法改变内部变量的内容,当然也可以新增/删除
内容,当需要删除内容时,设定的值为nil
即可。gjson
包的数据运行时修改特性非常强大,在该特性的支持下,各种数据结构的编码/解析显得异常的灵活方便。
data :=
`{
"users" : {
"count" : 100,
"list" : ["John", "小明"]
}
}`
} else {
c, _ := j.ToJson()
fmt.Println("JSON:")
fmt.Println(string(c))
fmt.Println("======================")
fmt.Println("XML:")
c, _ = j.ToXmlIndent()
fmt.Println(string(c))
fmt.Println("======================")
fmt.Println("YAML:")
c, _ = j.ToYaml()
fmt.Println(string(c))
fmt.Println("======================")
fmt.Println("TOML:")
c, _ = j.ToToml()
fmt.Println(string(c))
}