gjson

    特点:

    1. 支持数据层级检索;
    2. 支持运行时数据修改;
    3. 支持JSONXMLYAML/YMLTOMLStruct数据格式相互转换;

    使用方式

    https://godoc.org/github.com/gogf/gf/encoding/gjson

    1. data :=
    2. `{
    3. "users" : {
    4. "count" : 100,
    5. "list" : [
    6. {"name" : "小明", "score" : 60},
    7. {"name" : "John", "score" : 99.5}
    8. ]
    9. }
    10. }`
    11. if j, err := gjson.DecodeToJson([]byte(data)); err != nil {
    12. glog.Error(err)
    13. } else {
    14. fmt.Println("John Score:", j.GetFloat32("users.list.1.score"))

    可以看到,gjson.Json对象可以通过非常灵活的层级筛选功能(j.GetFloat32("users.list.1.score"))检索到对应的变量信息。这是gjson包的一大特色。

    1. `{
    2. "users" : {
    3. "count" : 100
    4. }
    5. }`
    6. if j, err := gjson.DecodeToJson([]byte(data)); err != nil {
    7. glog.Error(err)
    8. } else {
    9. j.Set("users.count", 2)
    10. j.Set("users.list", []string{"John", "小明"})
    11. c, _ := j.ToJson()
    12. fmt.Println(string(c))
    13. }

    执行后输出结果为:

    JSON数据通过gjson包读取后,可以通过Set方法改变内部变量的内容,当然也可以新增/删除内容,当需要删除内容时,设定的值为nil即可。gjson包的数据运行时修改特性非常强大,在该特性的支持下,各种数据结构的编码/解析显得异常的灵活方便。

    1. data :=
    2. `{
    3. "users" : {
    4. "count" : 100,
    5. "list" : ["John", "小明"]
    6. }
    7. }`
    8. } else {
    9. c, _ := j.ToJson()
    10. fmt.Println("JSON:")
    11. fmt.Println(string(c))
    12. fmt.Println("======================")
    13. fmt.Println("XML:")
    14. c, _ = j.ToXmlIndent()
    15. fmt.Println(string(c))
    16. fmt.Println("======================")
    17. fmt.Println("YAML:")
    18. c, _ = j.ToYaml()
    19. fmt.Println(string(c))
    20. fmt.Println("======================")
    21. fmt.Println("TOML:")
    22. c, _ = j.ToToml()
    23. fmt.Println(string(c))
    24. }