通用编解码-方法介绍 - 图1提示

以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档: https://pkg.go.dev/github.com/gogf/gf/v2/encoding/gjson

New

  • 说明: New 可以用任意类型的值 data 创建一个 Json 对象,但是由于数据访问的关系, data 应该是一个 map 或者 slice,否则是无意义的。

  • 注意: safe 参数决定了 Json 对象是否是并发安全的,默认为 false

  • 格式:

  1. func New(data interface{}, safe ...bool) *Json
  • 示例:
  1. func ExampleNew() {
  2. jsonContent := `{"name":"john", "score":"100"}`
  3. j := gjson.New(jsonContent)
  4. fmt.Println(j.Get("name"))
  5. fmt.Println(j.Get("score"))
  6. // Output:
  7. // john
  8. // 100
  9. }

NewWithTag

  • 说明: NewWithTag 可以用任意类型的值 data 创建一个 Json 对象,但是由于数据访问的关系, data 应该是一个 map 或者 slice,否则是无意义的。

  • 注意: tgts 参数指定了结构体转换到map的标签名的优先级,多个标签用 ',' 分割。

  • safe 参数决定了 Json 对象是否是并发安全的,默认为 false

  • 格式:

  1. func NewWithTag(data interface{}, tags string, safe ...bool) *Json
  • 示例:
  1. func ExampleNewWithTag() {
  2. type Me struct {
  3. Name string `tag:"name"`
  4. Score int `tag:"score"`
  5. Title string
  6. }
  7. me := Me{
  8. Name: "john",
  9. Score: 100,
  10. Title: "engineer",
  11. }
  12. j := gjson.NewWithTag(me, "tag", true)
  13. fmt.Println(j.Get("name"))
  14. fmt.Println(j.Get("score"))
  15. fmt.Println(j.Get("Title"))
  16. // Output:
  17. // john
  18. // 100
  19. // engineer
  20. }

NewWithOptions

  • 说明: NewWithOptions 可以用任意类型的值 data 创建一个 Json 对象,但是由于数据访问的关系, data 应该是一个 map 或者 slice,否则是无意义的。

  • 格式:

  1. func NewWithOptions(data interface{}, options Options) *Json
  • 示例:
  1. func ExampleNewWithOptions() {
  2. type Me struct {
  3. Name string `tag:"name"`
  4. Score int `tag:"score"`
  5. Title string
  6. }
  7. me := Me{
  8. Name: "john",
  9. Score: 100,
  10. Title: "engineer",
  11. }
  12. j := gjson.NewWithOptions(me, gjson.Options{
  13. Tags: "tag",
  14. })
  15. fmt.Println(j.Get("name"))
  16. fmt.Println(j.Get("score"))
  17. fmt.Println(j.Get("Title"))
  18. // Output:
  19. // john
  20. // 100
  21. // engineer
  22. }
  1. func ExampleNewWithOptions_UTF8BOM() {
  2. jsonContent := `{"name":"john", "score":"100"}`
  3. content := make([]byte, 3, len(jsonContent)+3)
  4. content[0] = 0xEF
  5. content[1] = 0xBB
  6. content[2] = 0xBF
  7. content = append(content, jsonContent...)
  8. j := gjson.NewWithOptions(content, gjson.Options{
  9. Tags: "tag",
  10. })
  11. fmt.Println(j.Get("name"))
  12. fmt.Println(j.Get("score"))
  13. // Output:
  14. // john
  15. // 100
  16. }

Load

  • 说明:Load 从指定的文件 path 中加载内容,并将其内容创建一个 Json 对象。

  • 格式:

  1. func Load(path string, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoad() {
  2. jsonFilePath := gtest.DataPath("json", "data1.json")
  3. j, _ := gjson.Load(jsonFilePath)
  4. fmt.Println(j.Get("name"))
  5. fmt.Println(j.Get("score"))
  6. notExistFilePath := gtest.DataPath("json", "data2.json")
  7. j2, _ := gjson.Load(notExistFilePath)
  8. fmt.Println(j2.Get("name"))
  9. // Output:
  10. // john
  11. // 100
  12. }
  1. func ExampleLoad_Xml() {
  2. jsonFilePath := gtest.DataPath("xml", "data1.xml")
  3. j, _ := gjson.Load(jsonFilePath)
  4. fmt.Println(j.Get("doc.name"))
  5. fmt.Println(j.Get("doc.score"))
  6. }

LoadJson

  • 说明: LoadJson 用给定的 JSON 格式的内容创建一个 Json 对象。

  • 格式:

  1. func LoadJson(data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadJson() {
  2. jsonContent := `{"name":"john", "score":"100"}`
  3. j, _ := gjson.LoadJson(jsonContent)
  4. fmt.Println(j.Get("name"))
  5. fmt.Println(j.Get("score"))
  6. // Output:
  7. // john
  8. // 100
  9. }

LoadXml

  • 说明: LoadXml 用给定的 XML 格式的内容创建一个 Json 对象。

  • 格式:

  1. func LoadXml(data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadXml() {
  2. xmlContent := `<?xml version="1.0" encoding="UTF-8"?>
  3. <base>
  4. <name>john</name>
  5. <score>100</score>
  6. </base>`
  7. j, _ := gjson.LoadXml(xmlContent)
  8. fmt.Println(j.Get("base.name"))
  9. fmt.Println(j.Get("base.score"))
  10. // Output:
  11. // john
  12. // 100
  13. }

LoadIni

  • 说明: LoadIni 用给定的 INI 格式的内容创建一个 Json 对象。

  • 格式:

  1. func LoadIni(data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadIni() {
  2. iniContent := `
  3. [base]
  4. name = john
  5. score = 100
  6. `
  7. j, _ := gjson.LoadIni(iniContent)
  8. fmt.Println(j.Get("base.name"))
  9. fmt.Println(j.Get("base.score"))
  10. // Output:
  11. // john
  12. // 100
  13. }

LoadYaml

  • 说明: LoadYaml 用给定的 YAML 格式的内容创建一个 Json 对象。

  • 格式:

  1. func LoadYaml(data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadYaml() {
  2. yamlContent :=
  3. `base:
  4. name: john
  5. score: 100`
  6. j, _ := gjson.LoadYaml(yamlContent)
  7. fmt.Println(j.Get("base.name"))
  8. fmt.Println(j.Get("base.score"))
  9. // Output:
  10. // john
  11. // 100
  12. }

LoadToml

  • 说明: LoadToml 用给定的 TOML 格式的内容创建一个 Json 对象。

  • 格式:

  1. func LoadToml(data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadToml() {
  2. tomlContent :=
  3. `[base]
  4. name = "john"
  5. score = 100`
  6. j, _ := gjson.LoadToml(tomlContent)
  7. fmt.Println(j.Get("base.name"))
  8. fmt.Println(j.Get("base.score"))
  9. // Output:
  10. // john
  11. // 100
  12. }

LoadContent

  • 说明:LoadContent 根据给定的内容创建一个 Json 对象,它自动检查 content 的数据类型,支持的内容类型如下: JSON, XML, INI, YAML和TOML

  • 格式:

  1. func LoadContent(data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadContent() {
  2. jsonContent := `{"name":"john", "score":"100"}`
  3. j, _ := gjson.LoadContent(jsonContent)
  4. fmt.Println(j.Get("name"))
  5. fmt.Println(j.Get("score"))
  6. // Output:
  7. // john
  8. // 100
  9. }
  1. func ExampleLoadContent_UTF8BOM() {
  2. jsonContent := `{"name":"john", "score":"100"}`
  3. content := make([]byte, 3, len(jsonContent)+3)
  4. content[0] = 0xEF
  5. content[1] = 0xBB
  6. content[2] = 0xBF
  7. content = append(content, jsonContent...)
  8. j, _ := gjson.LoadContent(content)
  9. fmt.Println(j.Get("name"))
  10. fmt.Println(j.Get("score"))
  11. // Output:
  12. // john
  13. // 100
  14. }
  1. func ExampleLoadContent_Xml() {
  2. xmlContent := `<?xml version="1.0" encoding="UTF-8"?>
  3. <base>
  4. <name>john</name>
  5. <score>100</score>
  6. </base>`
  7. x, _ := gjson.LoadContent(xmlContent)
  8. fmt.Println(x.Get("base.name"))
  9. fmt.Println(x.Get("base.score"))
  10. // Output:
  11. // john
  12. // 100
  13. }

LoadContentType

  • 说明:LoadContentType 根据给定的内容和类型创建一个 Json 对象,支持的内容类型如下: Json, XML, INI, YAML和TOML

  • 格式:

  1. func LoadContentType(dataType string, data interface{}, safe ...bool) (*Json, error)
  • 示例:
  1. func ExampleLoadContentType() {
  2. jsonContent := `{"name":"john", "score":"100"}`
  3. xmlContent := `<?xml version="1.0" encoding="UTF-8"?>
  4. <base>
  5. <name>john</name>
  6. <score>100</score>
  7. </base>`
  8. j, _ := gjson.LoadContentType("json", jsonContent)
  9. x, _ := gjson.LoadContentType("xml", xmlContent)
  10. j1, _ := gjson.LoadContentType("json", "")
  11. fmt.Println(j.Get("name"))
  12. fmt.Println(j.Get("score"))
  13. fmt.Println(x.Get("base.name"))
  14. fmt.Println(x.Get("base.score"))
  15. fmt.Println(j1.Get(""))
  16. // Output:
  17. // john
  18. // 100
  19. // john
  20. // 100
  21. }

IsValidDataType

  • 说明:IsValidDataType 检查给定的 dataType 是否是可以用于加载的有效数据内容。

  • 格式:

  1. func IsValidDataType(dataType string) bool
  • 示例:
  1. func ExampleIsValidDataType() {
  2. fmt.Println(gjson.IsValidDataType("json"))
  3. fmt.Println(gjson.IsValidDataType("yml"))
  4. fmt.Println(gjson.IsValidDataType("js"))
  5. fmt.Println(gjson.IsValidDataType("mp4"))
  6. fmt.Println(gjson.IsValidDataType("xsl"))
  7. fmt.Println(gjson.IsValidDataType("txt"))
  8. fmt.Println(gjson.IsValidDataType(""))
  9. fmt.Println(gjson.IsValidDataType(".json"))
  10. // Output:
  11. // true
  12. // true
  13. // true
  14. // false
  15. // false
  16. // false
  17. // false
  18. // true
  19. }

Valid

  • 说明:Valid 检查 data 是否为有效的 JSON 数据类型。 参数 data 指定 JSON 格式数据,可以是 bytesstring 类型。

  • 格式:

  1. func Valid(data interface{}) bool
  • 示例:
  1. func ExampleValid() {
  2. data1 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
  3. data2 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]`)
  4. fmt.Println(gjson.Valid(data1))
  5. fmt.Println(gjson.Valid(data2))
  6. // Output:
  7. // true
  8. // false
  9. }

Marshal

  • 说明:MarshalEncode 的别名。

  • 格式:

  1. func Marshal(v interface{}) (marshaledBytes []byte, err error)
  • 示例:
  1. func ExampleMarshal() {
  2. data := map[string]interface{}{
  3. "name": "john",
  4. "score": 100,
  5. }
  6. jsonData, _ := gjson.Marshal(data)
  7. fmt.Println(string(jsonData))
  8. type BaseInfo struct {
  9. Name string
  10. Age int
  11. }
  12. info := BaseInfo{
  13. Name: "Guo Qiang",
  14. Age: 18,
  15. }
  16. infoData, _ := gjson.Marshal(info)
  17. fmt.Println(string(infoData))
  18. // Output:
  19. // {"name":"john","score":100}
  20. // {"Name":"Guo Qiang","Age":18}
  21. }

MarshalIndent

  • 说明:MarshalIndentjson.MarshalIndent 的别名 。

  • 格式:

  1. func MarshalIndent(v interface{}, prefix, indent string) (marshaledBytes []byte, err error)
  • 示例:
  1. func ExampleMarshalIndent() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. infoData, _ := gjson.MarshalIndent(info, "", "\t")
  11. fmt.Println(string(infoData))
  12. // Output:
  13. // {
  14. // "Name": "John",
  15. // "Age": 18
  16. // }
  17. }

Unmarshal

  • 说明: UnmarshalDecodeTo 的别名。

  • 格式:

  1. func Unmarshal(data []byte, v interface{}) (err error)
  • 示例:
  1. func ExampleUnmarshal() {
  2. type BaseInfo struct {
  3. Name string
  4. Score int
  5. }
  6. var info BaseInfo
  7. jsonContent := "{\"name\":\"john\",\"score\":100}"
  8. gjson.Unmarshal([]byte(jsonContent), &info)
  9. fmt.Printf("%+v", info)
  10. // Output:
  11. // {Name:john Score:100}
  12. }

Encode

  • 说明: Encode 将任意类型 value 序列化为内容为 JSONbyte 数组。

  • 格式:

  1. func Encode(value interface{}) ([]byte, error)
  • 示例:
  1. func ExampleEncode() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. infoData, _ := gjson.Encode(info)
  11. fmt.Println(string(infoData))
  12. // Output:
  13. // {"Name":"John","Age":18}
  14. }

MustEncode

  • 说明:MustEncode 执行 Encode 操作,但如果发生任何错误,它会 panic

  • 格式:

  1. func MustEncode(value interface{}) []byte
  • 示例:
  1. func ExampleMustEncode() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. infoData := gjson.MustEncode(info)
  11. fmt.Println(string(infoData))
  12. // Output:
  13. // {"Name":"John","Age":18}
  14. }

EncodeString

  • 说明: EncodeString 将任意类型 value 序列化为内容为 JSONstring

  • 格式:

  1. func EncodeString(value interface{}) (string, error)
  • 示例:
  1. func ExampleEncodeString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. infoData, _ := gjson.EncodeString(info)
  11. fmt.Println(infoData)
  12. // Output:
  13. // {"Name":"John","Age":18}
  14. }

MustEncodeString

  • 说明: MustEncodeString 将任意类型 value 序列化为内容为 JSONstring,但如果发生任何错误,它会 panic

  • 格式:

  1. func MustEncodeString(value interface{}) string
  • 示例:
  1. func ExampleMustEncodeString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. infoData := gjson.MustEncodeString(info)
  11. fmt.Println(infoData)
  12. // Output:
  13. // {"Name":"John","Age":18}
  14. }

Decode

  • 说明:DecodeJSON 格式的内容 data 解码为 interface{}。 参数 data 可以是 []bytestring

  • 格式:

  1. func Decode(data interface{}, options ...Options) (interface{}, error)
  • 示例:
  1. func ExampleDecode() {
  2. jsonContent := `{"name":"john","score":100}`
  3. info, _ := gjson.Decode([]byte(jsonContent))
  4. fmt.Println(info)
  5. // Output:
  6. // map[name:john score:100]
  7. }

DecodeTo

  • 说明:DecodeToJSON 格式的数据 data 解码到指定的 interface 类型的变量 v 中。参数 data 可以是 []bytestring。参数 v 应该是指针类型。

  • 格式:

  1. func DecodeTo(data interface{}, v interface{}, options ...Options) (err error)
  • 示例:
  1. func ExampleDecodeTo() {
  2. type BaseInfo struct {
  3. Name string
  4. Score int
  5. }
  6. var info BaseInfo
  7. jsonContent := "{\"name\":\"john\",\"score\":100}"
  8. gjson.DecodeTo([]byte(jsonContent), &info)
  9. fmt.Printf("%+v", info)
  10. // Output:
  11. // {Name:john Score:100}
  12. }

DecodeToJson

  • 说明:DecodeToJsonJSON 格式的数据 data 编码为 json 对象。参数 data 可以是 []bytestring

  • 格式:

  1. func DecodeToJson(data interface{}, options ...Options) (*Json, error)
  • 示例:
  1. func ExampleDecodeToJson() {
  2. jsonContent := `{"name":"john","score":100}"`
  3. j, _ := gjson.DecodeToJson([]byte(jsonContent))
  4. fmt.Println(j.Map())
  5. // May Output:
  6. // map[name:john score:100]
  7. }

SetSplitChar

  • 说明:SetSplitChar 设置数据访问的层级分隔符。

  • 格式:

  1. func (j *Json) SetSplitChar(char byte)
  • 示例:
  1. func ExampleJson_SetSplitChar() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 2,
  6. "list" : [
  7. {"name" : "Ming", "score" : 60},
  8. {"name" : "John", "score" : 99.5}
  9. ]
  10. }
  11. }`
  12. if j, err := gjson.DecodeToJson(data); err != nil {
  13. panic(err)
  14. } else {
  15. j.SetSplitChar('#')
  16. fmt.Println("John Score:", j.Get("users#list#1#score").Float32())
  17. }
  18. // Output:
  19. // John Score: 99.5
  20. }

SetViolenceCheck

  • 说明: SetViolenceCheck 启用/禁用数据层级访问的暴力检查。

  • 格式:

  1. func (j *Json) SetViolenceCheck(enabled bool)
  • 示例:
  1. func ExampleJson_SetViolenceCheck() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 100
  6. },
  7. "users.count" : 101
  8. }`
  9. if j, err := gjson.DecodeToJson(data); err != nil {
  10. fmt.Println(err)
  11. } else {
  12. j.SetViolenceCheck(true)
  13. fmt.Println("Users Count:", j.Get("users.count"))
  14. }
  15. // Output:
  16. // Users Count: 101
  17. }

ToJson

  • 说明: ToJson 返回类型为 []byteJSON 内容。

  • 格式:

  1. func (j *Json) ToJson() ([]byte, error)
  • 示例:
  1. func ExampleJson_ToJson() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonBytes, _ := j.ToJson()
  12. fmt.Println(string(jsonBytes))
  13. // Output:
  14. // {"Age":18,"Name":"John"}
  15. }

ToJsonString

  • 说明: ToJsonString 返回类型为 stringJSON 内容。

  • 格式:

  1. func (j *Json) ToJsonString() (string, error)
  • 示例:
  1. func ExampleJson_ToJsonString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonStr, _ := j.ToJsonString()
  12. fmt.Println(jsonStr)
  13. // Output:
  14. // {"Age":18,"Name":"John"}
  15. }

ToJsonIndent

  • 说明: ToJsonIndent 返回类型为 []byte 的带缩进格式的 JSON 内容。

  • 格式:

  1. func (j *Json) ToJsonIndent() ([]byte, error)
  • 示例:
  1. func ExampleJson_ToJsonIndent() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonBytes, _ := j.ToJsonIndent()
  12. fmt.Println(string(jsonBytes))
  13. // Output:
  14. //{
  15. // "Age": 18,
  16. // "Name": "John"
  17. //}
  18. }

ToJsonIndentString

  • 说明: ToJsonIndentString 返回类型为 string 的带缩进格式的 JSON 内容。

  • 格式:

  1. func (j *Json) ToJsonIndentString() (string, error)
  • 示例:
  1. func ExampleJson_ToJsonIndentString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonStr, _ := j.ToJsonIndentString()
  12. fmt.Println(jsonStr)
  13. // Output:
  14. //{
  15. // "Age": 18,
  16. // "Name": "John"
  17. //}
  18. }

MustToJson

  • 说明: MustToJson 返回类型为 []byteJSON 内容,如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToJson() []byte
  • 示例:
  1. func ExampleJson_MustToJson() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonBytes := j.MustToJson()
  12. fmt.Println(string(jsonBytes))
  13. // Output:
  14. // {"Age":18,"Name":"John"}
  15. }

MustToJsonString

  • 说明: MustToJsonString 返回类型为 stringJSON 内容,如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToJsonString() string
  • 示例:
  1. func ExampleJson_MustToJsonString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonStr := j.MustToJsonString()
  12. fmt.Println(jsonStr)
  13. // Output:
  14. // {"Age":18,"Name":"John"}
  15. }

MustToJsonIndent

  • 说明: MustToJsonStringIndent 返回类型为 []byte 的带缩进格式的 JSON 内容,如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToJsonIndent() []byte
  • 示例:
  1. func ExampleJson_MustToJsonIndent() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonBytes := j.MustToJsonIndent()
  12. fmt.Println(string(jsonBytes))
  13. // Output:
  14. //{
  15. // "Age": 18,
  16. // "Name": "John"
  17. //}
  18. }

MustToJsonIndentString

  • 说明: MustToJsonStringIndent 返回类型为 string 的带缩进格式的 JSON 内容,如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToJsonIndentString() string
  • 示例:
  1. func ExampleJson_MustToJsonIndentString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonStr := j.MustToJsonIndentString()
  12. fmt.Println(jsonStr)
  13. // Output:
  14. //{
  15. // "Age": 18,
  16. // "Name": "John"
  17. //}
  18. }

ToXml

  • 说明: ToXml 返回类型为 []byte 格式为 XML 的内容。

  • 格式:

  1. func (j *Json) ToXml(rootTag ...string) ([]byte, error)
  • 示例:
  1. func ExampleJson_ToXml() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlBytes, _ := j.ToXml()
  12. fmt.Println(string(xmlBytes))
  13. // Output:
  14. // <doc><Age>18</Age><Name>John</Name></doc>
  15. }

ToXmlString

  • 说明: ToXmlString 返回类型为 string 格式为 XML 的内容。

  • 格式:

  1. func (j *Json) ToXmlString(rootTag ...string) (string, error)
  • 示例:
  1. func ExampleJson_ToXmlString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlStr, _ := j.ToXmlString()
  12. fmt.Println(string(xmlStr))
  13. // Output:
  14. // <doc><Age>18</Age><Name>John</Name></doc>
  15. }

ToXmlIndent

  • 说明: ToXmlIndent 返回类型为 []byte 的带缩进格式的 XML 内容。

  • 格式:

  1. func (j *Json) ToXmlIndent(rootTag ...string) ([]byte, error)
  • 示例:
  1. func ExampleJson_ToXmlIndent() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlBytes, _ := j.ToXmlIndent()
  12. fmt.Println(string(xmlBytes))
  13. // Output:
  14. //<doc>
  15. // <Age>18</Age>
  16. // <Name>John</Name>
  17. //</doc>
  18. }

ToXmlIndentString

  • 说明: ToXmlIndentString 返回类型为 string 的带缩进格式的 XML 内容。

  • 格式:

  1. func (j *Json) ToXmlIndentString(rootTag ...string) (string, error)
  • 示例:
  1. func ExampleJson_ToXmlIndentString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlStr, _ := j.ToXmlIndentString()
  12. fmt.Println(string(xmlStr))
  13. // Output:
  14. //<doc>
  15. // <Age>18</Age>
  16. // <Name>John</Name>
  17. //</doc>
  18. }

MustToXml

  • 说明: MustToXml 返回类型为 []byte 格式为 XML 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToXml(rootTag ...string) []byte
  • 示例:
  1. func ExampleJson_MustToXml() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlBytes := j.MustToXml()
  12. fmt.Println(string(xmlBytes))
  13. // Output:
  14. // <doc><Age>18</Age><Name>John</Name></doc>
  15. }

MustToXmlString

  • 说明: MustToXmlString 返回类型为 string 格式为 XML 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToXmlString(rootTag ...string) string
  • 示例:
  1. func ExampleJson_MustToXmlString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlStr := j.MustToXmlString()
  12. fmt.Println(string(xmlStr))
  13. // Output:
  14. // <doc><Age>18</Age><Name>John</Name></doc>
  15. }

MustToXmlIndent

  • 说明: MustToXmlStringIndent 返回类型为 []byte 带缩进格式的 XML 内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToXmlIndent(rootTag ...string) []byte
  • 示例:
  1. func ExampleJson_MustToXmlIndent() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlBytes := j.MustToXmlIndent()
  12. fmt.Println(string(xmlBytes))
  13. // Output:
  14. //<doc>
  15. // <Age>18</Age>
  16. // <Name>John</Name>
  17. //</doc>
  18. }

MustToXmlIndentString

  • 说明: MustToXmlStringIndentString 返回类型为 string 带缩进格式的 XML 内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToXmlIndentString(rootTag ...string) string
  • 示例:
  1. func ExampleJson_MustToXmlIndentString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. xmlStr := j.MustToXmlIndentString()
  12. fmt.Println(string(xmlStr))
  13. // Output:
  14. //<doc>
  15. // <Age>18</Age>
  16. // <Name>John</Name>
  17. //</doc>
  18. }

ToYaml

  • 说明: ToYaml 返回类型为 []byte 格式为 YAML 的内容。

  • 格式:

  1. func (j *Json) ToYaml() ([]byte, error)
  • 示例:
  1. func ExampleJson_ToYaml() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. YamlBytes, _ := j.ToYaml()
  12. fmt.Println(string(YamlBytes))
  13. // Output:
  14. //Age: 18
  15. //Name: John
  16. }

ToYamlIndent

  • 说明: ToYamlIndent 返回类型为 []byte 带缩进格式的 YAML 内容。

  • 格式:

  1. func (j *Json) ToYamlIndent(indent string) ([]byte, error)
  • 示例:
  1. func ExampleJson_ToYamlIndent() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. YamlBytes, _ := j.ToYamlIndent("")
  12. fmt.Println(string(YamlBytes))
  13. // Output:
  14. //Age: 18
  15. //Name: John
  16. }

ToYamlString

  • 说明: ToYamlString 返回类型为 string 格式为 YAML 的内容。

  • 格式:

  1. func (j *Json) ToYamlString() (string, error)
  • 示例:
  1. func ExampleJson_ToYamlString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. YamlStr, _ := j.ToYamlString()
  12. fmt.Println(string(YamlStr))
  13. // Output:
  14. //Age: 18
  15. //Name: John
  16. }

MustToYaml

  • 说明: MustToYaml 返回类型为 []byte 格式为 YAML 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToYaml() []byte
  • 示例:
  1. func ExampleJson_MustToYaml() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. YamlBytes := j.MustToYaml()
  12. fmt.Println(string(YamlBytes))
  13. // Output:
  14. //Age: 18
  15. //Name: John
  16. }

MustToYamlString

  • 说明: MustToYamlString 返回类型为 string 格式为 YAML 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToYamlString() string
  • 示例:
  1. func ExampleJson_MustToYamlString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. YamlStr := j.MustToYamlString()
  12. fmt.Println(string(YamlStr))
  13. // Output:
  14. //Age: 18
  15. //Name: John
  16. }

ToToml

  • 说明: ToToml 返回类型为 []byte 格式为 TOML 的内容。

  • 格式:

  1. func (j *Json) ToToml() ([]byte, error)
  • 示例:
  1. func ExampleJson_ToToml() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. TomlBytes, _ := j.ToToml()
  12. fmt.Println(string(TomlBytes))
  13. // Output:
  14. //Age = 18
  15. //Name = "John"
  16. }

ToTomlString

  • 说明: ToTomlString 返回类型为 string 格式为 TOML 的内容。

  • 格式:

  1. func (j *Json) ToTomlString() (string, error)
  • 示例:
  1. func ExampleJson_ToTomlString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. TomlStr, _ := j.ToTomlString()
  12. fmt.Println(string(TomlStr))
  13. // Output:
  14. //Age = 18
  15. //Name = "John"
  16. }

MustToToml

  • 说明: MustToToml 返回类型为 []byte 格式为 TOML 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToToml() []byte
  • 示例:
  1. func ExampleJson_MustToToml() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. TomlBytes := j.MustToToml()
  12. fmt.Println(string(TomlBytes))
  13. // Output:
  14. //Age = 18
  15. //Name = "John"
  16. }

MustToTomlString

  • 说明: MustToTomlString 返回类型为 string 格式为 TOML 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToTomlString() string
  • 示例:
  1. func ExampleJson_MustToTomlString() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. TomlStr := j.MustToTomlString()
  12. fmt.Println(string(TomlStr))
  13. // Output:
  14. //Age = 18
  15. //Name = "John"
  16. }

ToIni

  • 说明: ToIni 返回类型为 []byte 格式为 INI 的内容。

  • 格式:

  1. func (j *Json) ToIni() ([]byte, error)
  • 示例:
  1. func ExampleJson_ToIni() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. IniBytes, _ := j.ToIni()
  12. fmt.Println(string(IniBytes))
  13. // May Output:
  14. //Name=John
  15. //Age=18
  16. }

ToIniString

  • 说明: ToIniString 返回类型为 string 格式为 INI 的内容。

  • 格式:

  1. func (j *Json) ToIniString() (string, error)
  • 示例:
  1. func ExampleJson_ToIniString() {
  2. type BaseInfo struct {
  3. Name string
  4. }
  5. info := BaseInfo{
  6. Name: "John",
  7. }
  8. j := gjson.New(info)
  9. IniStr, _ := j.ToIniString()
  10. fmt.Println(string(IniStr))
  11. // Output:
  12. //Name=John
  13. }

MustToIni

  • 说明: MustToIni 返回类型为 []byte 格式为 INI 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToIni() []byte
  • 示例:
  1. func ExampleJson_MustToIni() {
  2. type BaseInfo struct {
  3. Name string
  4. }
  5. info := BaseInfo{
  6. Name: "John",
  7. }
  8. j := gjson.New(info)
  9. IniBytes := j.MustToIni()
  10. fmt.Println(string(IniBytes))
  11. // Output:
  12. //Name=John
  13. }

MustToIniString

  • 说明: MustToIniString 返回类型为 string 格式为 INI 的内容。如果发生任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustToIniString() string
  • 示例:
  1. func ExampleJson_MustToIniString() {
  2. type BaseInfo struct {
  3. Name string
  4. }
  5. info := BaseInfo{
  6. Name: "John",
  7. }
  8. j := gjson.New(info)
  9. IniStr := j.MustToIniString()
  10. fmt.Println(string(IniStr))
  11. // Output:
  12. //Name=John
  13. }

MarshalJSON

  • 说明:MarshalJSON 实现了 json.Marshal 的接口 MarshalJSON

  • 格式:

  1. func (j Json) MarshalJSON() ([]byte, error)
  • 示例:
  1. func ExampleJson_MarshalJSON() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. jsonBytes, _ := j.MarshalJSON()
  12. fmt.Println(string(jsonBytes))
  13. // Output:
  14. // {"Age":18,"Name":"John"}
  15. }

UnmarshalJSON

  • 说明: UnmarshalJSON 实现了 json.Unmarshal 的接口 UnmarshalJSON

  • 格式:

  1. func (j *Json) UnmarshalJSON(b []byte) error
  • 示例:
  1. func ExampleJson_UnmarshalJSON() {
  2. jsonStr := `{"Age":18,"Name":"John"}`
  3. j := gjson.New("")
  4. j.UnmarshalJSON([]byte(jsonStr))
  5. fmt.Println(j.Map())
  6. // Output:
  7. // map[Age:18 Name:John]
  8. }

UnmarshalValue

  • 说明:UnmarshalValue 是一个为 Json 设置任何类型的值的接口实现。

  • 格式:

  1. func (j *Json) UnmarshalValue(value interface{}) error
  • 示例:
  1. func ExampleJson_UnmarshalValue_Yaml() {
  2. yamlContent :=
  3. `base:
  4. name: john
  5. score: 100`
  6. j := gjson.New("")
  7. j.UnmarshalValue([]byte(yamlContent))
  8. fmt.Println(j.Var().String())
  9. // Output:
  10. // {"base":{"name":"john","score":100}}
  11. }
  1. func ExampleJson_UnmarshalValue_Xml() {
  2. xmlStr := `<?xml version="1.0" encoding="UTF-8"?><doc><name>john</name><score>100</score></doc>`
  3. j := gjson.New("")
  4. j.UnmarshalValue([]byte(xmlStr))
  5. fmt.Println(j.Var().String())
  6. // Output:
  7. // {"doc":{"name":"john","score":"100"}}
  8. }

MapStrAny

  • 说明: MapStrAny 实现了接口方法 MapStrAny()

  • 格式:

  1. func (j *Json) MapStrAny() map[string]interface{}
  • 示例:
  1. func ExampleJson_MapStrAny() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. fmt.Println(j.MapStrAny())
  12. // Output:
  13. // map[Age:18 Name:John]
  14. }

Interfaces

  • 说明: Interfaces 实现了接口方法 Interfaces()

  • 格式:

  1. func (j *Json) Interfaces() []interface{}
  • 示例:
  1. func ExampleJson_Interfaces() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. infoList := []BaseInfo{
  7. BaseInfo{
  8. Name: "John",
  9. Age: 18,
  10. },
  11. BaseInfo{
  12. Name: "Tom",
  13. Age: 20,
  14. },
  15. }
  16. j := gjson.New(infoList)
  17. fmt.Println(j.Interfaces())
  18. // Output:
  19. // [{John 18} {Tom 20}]
  20. }

Interface

  • 说明: Interface 返回 Json 对象的值。

  • 格式:

  1. func (j *Json) Interface() interface{}
  • 示例:
  1. func ExampleJson_Interface() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. fmt.Println(j.Interface())
  12. var nilJ *gjson.Json = nil
  13. fmt.Println(nilJ.Interface())
  14. // Output:
  15. // map[Age:18 Name:John]
  16. // <nil>
  17. }

Var

  • 说明: Var 返回类型为 *gvar.VarJson 对象的值。

  • 格式:

  1. func (j *Json) Var() *gvar.Var
  • 示例:
  1. func ExampleJson_Var() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. fmt.Println(j.Var().String())
  12. fmt.Println(j.Var().Map())
  13. // Output:
  14. // {"Age":18,"Name":"John"}
  15. // map[Age:18 Name:John]
  16. }

IsNil

  • 说明: IsNil 检查Json对象值是否为 nil

  • 格式:

  1. func (j *Json) IsNil() bool
  • 示例:
  1. func ExampleJson_IsNil() {
  2. data1 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
  3. data2 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]`)
  4. j1, _ := gjson.LoadContent(data1)
  5. fmt.Println(j1.IsNil())
  6. j2, _ := gjson.LoadContent(data2)
  7. fmt.Println(j2.IsNil())
  8. // Output:
  9. // false
  10. // true
  11. }

Get

  • 说明:Get 根据指定的 pattern 检索并返回值。如果 pattern 给的是 ".",将返回当前 Json 对象的所有值。没有 pattern 没有找到,则返回 nil

  • 格式:

  1. func (j *Json) Get(pattern string, def ...interface{}) *gvar.Var
  • 示例:
  1. func ExampleJson_Get() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "array" : ["John", "Ming"]
  7. }
  8. }`
  9. j, _ := gjson.LoadContent(data)
  10. fmt.Println(j.Get("."))
  11. fmt.Println(j.Get("users"))
  12. fmt.Println(j.Get("users.count"))
  13. fmt.Println(j.Get("users.array"))
  14. var nilJ *gjson.Json = nil
  15. fmt.Println(nilJ.Get("."))
  16. // Output:
  17. // {"users":{"array":["John","Ming"],"count":1}}
  18. // {"array":["John","Ming"],"count":1}
  19. // 1
  20. // ["John","Ming"]
  21. }

GetJson

  • 说明:GetJson 通过指定的 pattern 获取值,并将其转换为一个非并发安全的 Json 对象。

  • 格式:

  1. func (j *Json) GetJson(pattern string, def ...interface{}) *Json
  • 示例:
  1. func ExampleJson_GetJson() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "array" : ["John", "Ming"]
  7. }
  8. }`
  9. j, _ := gjson.LoadContent(data)
  10. fmt.Println(j.GetJson("users.array").Array())
  11. // Output:
  12. // [John Ming]
  13. }

GetJsons

  • 说明:GetJsons 通过指定的 pattern 获取值,并将其转换为一个非并发安全的 Json 对象切片。

  • 格式:

  1. func (j *Json) GetJsons(pattern string, def ...interface{}) []*Json
  • 示例:
  1. func ExampleJson_GetJsons() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 3,
  6. "array" : [{"Age":18,"Name":"John"}, {"Age":20,"Name":"Tom"}]
  7. }
  8. }`
  9. j, _ := gjson.LoadContent(data)
  10. jsons := j.GetJsons("users.array")
  11. for _, json := range jsons {
  12. fmt.Println(json.Interface())
  13. }
  14. // Output:
  15. // map[Age:18 Name:John]
  16. // map[Age:20 Name:Tom]
  17. }

GetJsonMap

  • 说明:GetJsonMap 通过指定的 pattern 获取值,并将其转换为一个非并发安全的 Json 对象的 map

  • 格式:

  1. func (j *Json) GetJsonMap(pattern string, def ...interface{}) map[string]*Json
  • 示例:
  1. func ExampleJson_GetJsonMap() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "array" : {
  7. "info" : {"Age":18,"Name":"John"},
  8. "addr" : {"City":"Chengdu","Company":"Tencent"}
  9. }
  10. }
  11. }`
  12. j, _ := gjson.LoadContent(data)
  13. jsonMap := j.GetJsonMap("users.array")
  14. for _, json := range jsonMap {
  15. fmt.Println(json.Interface())
  16. }
  17. // May Output:
  18. // map[City:Chengdu Company:Tencent]
  19. // map[Age:18 Name:John]
  20. }

Set

  • 说明:Set 设置指定 pattern 的值。 它默认支持通过字符 '.' 进行数据层级访问。

  • 格式:

  1. func (j *Json) Set(pattern string, value interface{}) error
  • 示例:
  1. func ExampleJson_Set() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. j.Set("Addr", "ChengDu")
  12. j.Set("Friends.0", "Tom")
  13. fmt.Println(j.Var().String())
  14. // Output:
  15. // {"Addr":"ChengDu","Age":18,"Friends":["Tom"],"Name":"John"}
  16. }

MustSet

  • 说明:MustSet 执行 Set,但如果有任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustSet(pattern string, value interface{})
  • 示例:
  1. func ExampleJson_MustSet() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. j.MustSet("Addr", "ChengDu")
  12. fmt.Println(j.Var().String())
  13. // Output:
  14. // {"Addr":"ChengDu","Age":18,"Name":"John"}
  15. }

Remove

  • 说明: Remove 删除指定 pattern 的值。 它默认支持通过字符 '.' 进行数据层级访问。

  • 格式:

  1. func (j *Json) Remove(pattern string) error
  • 示例:
  1. func ExampleJson_Remove() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. j.Remove("Age")
  12. fmt.Println(j.Var().String())
  13. // Output:
  14. // {"Name":"John"}
  15. }

MustRemove

  • 说明:MustRemove 执行Remove,但如果有任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustRemove(pattern string)
  • 示例:
  1. func ExampleJson_MustRemove() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. j.MustRemove("Age")
  12. fmt.Println(j.Var().String())
  13. // Output:
  14. // {"Name":"John"}
  15. }

Contains

  • 说明: Contains 检查指定 pattern 的值是否存在。

  • 格式:

  1. func (j *Json) Contains(pattern string) bool
  • 示例:
  1. func ExampleJson_Contains() {
  2. type BaseInfo struct {
  3. Name string
  4. Age int
  5. }
  6. info := BaseInfo{
  7. Name: "John",
  8. Age: 18,
  9. }
  10. j := gjson.New(info)
  11. fmt.Println(j.Contains("Age"))
  12. fmt.Println(j.Contains("Addr"))
  13. // Output:
  14. // true
  15. // false
  16. }

Len

  • 说明:Len 根据指定的 pattern 返回 值的长度/大小。 pattern 的值应该是 slicemap 的类型。 如果找不到目标值或类型无效,则返回 -1

  • 格式:

  1. func (j *Json) Len(pattern string) int
  • 示例:
  1. func ExampleJson_Len() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "nameArray" : ["Join", "Tom"],
  7. "infoMap" : {
  8. "name" : "Join",
  9. "age" : 18,
  10. "addr" : "ChengDu"
  11. }
  12. }
  13. }`
  14. j, _ := gjson.LoadContent(data)
  15. fmt.Println(j.Len("users.nameArray"))
  16. fmt.Println(j.Len("users.infoMap"))
  17. // Output:
  18. // 2
  19. // 3
  20. }

Append

  • 说明:Append 通过指定的 pattern 将值追加到 Json 对象中。 pattern 的值的类型应该是 slice

  • 格式:

  1. func (j *Json) Append(pattern string, value interface{}) error
  • 示例:
  1. func ExampleJson_Append() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "array" : ["John", "Ming"]
  7. }
  8. }`
  9. j, _ := gjson.LoadContent(data)
  10. j.Append("users.array", "Lily")
  11. fmt.Println(j.Get("users.array").Array())
  12. // Output:
  13. // [John Ming Lily]
  14. }

MustAppend

  • 说明:MustAppend 执行 Append,但如果有任何错误,会发生 panic

  • 格式:

  1. func (j *Json) MustAppend(pattern string, value interface{})
  • 示例:
  1. func ExampleJson_MustAppend() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "array" : ["John", "Ming"]
  7. }
  8. }`
  9. j, _ := gjson.LoadContent(data)
  10. j.MustAppend("users.array", "Lily")
  11. fmt.Println(j.Get("users.array").Array())
  12. // Output:
  13. // [John Ming Lily]
  14. }

Map

  • 说明: Map 将当前 Json 对象转换为 map[string]interface{}。 如果失败,则返回 nil

  • 格式:

  1. func (j *Json) Map() map[string]interface{}
  • 示例:
  1. func ExampleJson_Map() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "info" : {
  7. "name" : "John",
  8. "age" : 18,
  9. "addr" : "ChengDu"
  10. }
  11. }
  12. }`
  13. j, _ := gjson.LoadContent(data)
  14. fmt.Println(j.Get("users.info").Map())
  15. // Output:
  16. // map[addr:ChengDu age:18 name:John]
  17. }

Array

  • 说明:Array 将当前 Json 对象转换为 []interface{}。 如果失败,则返回 nil

  • 格式:

  1. func (j *Json) Array() []interface{}
  • 示例:
  1. func ExampleJson_Array() {
  2. data :=
  3. `{
  4. "users" : {
  5. "count" : 1,
  6. "array" : ["John", "Ming"]
  7. }
  8. }`
  9. j, _ := gjson.LoadContent(data)
  10. fmt.Println(j.Get("users.array"))
  11. // Output:
  12. // ["John","Ming"]
  13. }

Scan

  • 说明: Scan 自动调用 StructStructs 函数根据参数 pointer 的类型来进行转换。

  • 格式:

  1. func (j *Json) Scan(pointer interface{}, mapping ...map[string]string) error
  • 示例:
  1. func ExampleJson_Scan() {
  2. data := `{"name":"john","age":"18"}`
  3. type BaseInfo struct {
  4. Name string
  5. Age int
  6. }
  7. info := BaseInfo{}
  8. j, _ := gjson.LoadContent(data)
  9. j.Scan(&info)
  10. fmt.Println(info)
  11. // May Output:
  12. // {john 18}
  13. }

Dump

  • 说明: Dump 以可读性更高的方式打印 Json 对象。

  • 格式:

  1. func (j *Json) Dump()
  • 示例:
  1. func ExampleJson_Dump() {
  2. data := `{"name":"john","age":"18"}`
  3. j, _ := gjson.LoadContent(data)
  4. j.Dump()
  5. // May Output:
  6. //{
  7. // "name": "john",
  8. // "age": "18",
  9. //}
  10. }