以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档: https://pkg.go.dev/github.com/gogf/gf/v2/encoding/gjson
New
-
说明:
New
可以用任意类型的值data
创建一个Json
对象,但是由于数据访问的关系,data
应该是一个map
或者slice
,否则是无意义的。 -
注意:
safe
参数决定了Json
对象是否是并发安全的,默认为false
-
格式:
func New(data interface{}, safe ...bool) *Json
- 示例:
func ExampleNew() {
jsonContent := `{"name":"john", "score":"100"}`
j := gjson.New(jsonContent)
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
// Output:
// john
// 100
}
NewWithTag
-
说明:
NewWithTag
可以用任意类型的值data
创建一个Json
对象,但是由于数据访问的关系,data
应该是一个map
或者slice
,否则是无意义的。 -
注意:
tgts
参数指定了结构体转换到map的标签名的优先级,多个标签用','
分割。 -
safe
参数决定了Json
对象是否是并发安全的,默认为false
-
格式:
func NewWithTag(data interface{}, tags string, safe ...bool) *Json
- 示例:
func ExampleNewWithTag() {
type Me struct {
Name string `tag:"name"`
Score int `tag:"score"`
Title string
}
me := Me{
Name: "john",
Score: 100,
Title: "engineer",
}
j := gjson.NewWithTag(me, "tag", true)
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
fmt.Println(j.Get("Title"))
// Output:
// john
// 100
// engineer
}
NewWithOptions
-
说明:
NewWithOptions
可以用任意类型的值data
创建一个Json
对象,但是由于数据访问的关系,data
应该是一个map
或者slice
,否则是无意义的。 -
格式:
func NewWithOptions(data interface{}, options Options) *Json
- 示例:
func ExampleNewWithOptions() {
type Me struct {
Name string `tag:"name"`
Score int `tag:"score"`
Title string
}
me := Me{
Name: "john",
Score: 100,
Title: "engineer",
}
j := gjson.NewWithOptions(me, gjson.Options{
Tags: "tag",
})
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
fmt.Println(j.Get("Title"))
// Output:
// john
// 100
// engineer
}
func ExampleNewWithOptions_UTF8BOM() {
jsonContent := `{"name":"john", "score":"100"}`
content := make([]byte, 3, len(jsonContent)+3)
content[0] = 0xEF
content[1] = 0xBB
content[2] = 0xBF
content = append(content, jsonContent...)
j := gjson.NewWithOptions(content, gjson.Options{
Tags: "tag",
})
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
// Output:
// john
// 100
}
Load
-
说明:
Load
从指定的文件path
中加载内容,并将其内容创建一个Json
对象。 -
格式:
func Load(path string, safe ...bool) (*Json, error)
- 示例:
func ExampleLoad() {
jsonFilePath := gtest.DataPath("json", "data1.json")
j, _ := gjson.Load(jsonFilePath)
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
notExistFilePath := gtest.DataPath("json", "data2.json")
j2, _ := gjson.Load(notExistFilePath)
fmt.Println(j2.Get("name"))
// Output:
// john
// 100
}
func ExampleLoad_Xml() {
jsonFilePath := gtest.DataPath("xml", "data1.xml")
j, _ := gjson.Load(jsonFilePath)
fmt.Println(j.Get("doc.name"))
fmt.Println(j.Get("doc.score"))
}
LoadJson
-
说明:
LoadJson
用给定的JSON
格式的内容创建一个Json
对象。 -
格式:
func LoadJson(data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadJson() {
jsonContent := `{"name":"john", "score":"100"}`
j, _ := gjson.LoadJson(jsonContent)
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
// Output:
// john
// 100
}
LoadXml
-
说明:
LoadXml
用给定的XML
格式的内容创建一个Json
对象。 -
格式:
func LoadXml(data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadXml() {
xmlContent := `<?xml version="1.0" encoding="UTF-8"?>
<base>
<name>john</name>
<score>100</score>
</base>`
j, _ := gjson.LoadXml(xmlContent)
fmt.Println(j.Get("base.name"))
fmt.Println(j.Get("base.score"))
// Output:
// john
// 100
}
LoadIni
-
说明:
LoadIni
用给定的INI
格式的内容创建一个Json
对象。 -
格式:
func LoadIni(data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadIni() {
iniContent := `
[base]
name = john
score = 100
`
j, _ := gjson.LoadIni(iniContent)
fmt.Println(j.Get("base.name"))
fmt.Println(j.Get("base.score"))
// Output:
// john
// 100
}
LoadYaml
-
说明:
LoadYaml
用给定的YAML
格式的内容创建一个Json
对象。 -
格式:
func LoadYaml(data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadYaml() {
yamlContent :=
`base:
name: john
score: 100`
j, _ := gjson.LoadYaml(yamlContent)
fmt.Println(j.Get("base.name"))
fmt.Println(j.Get("base.score"))
// Output:
// john
// 100
}
LoadToml
-
说明:
LoadToml
用给定的TOML
格式的内容创建一个Json
对象。 -
格式:
func LoadToml(data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadToml() {
tomlContent :=
`[base]
name = "john"
score = 100`
j, _ := gjson.LoadToml(tomlContent)
fmt.Println(j.Get("base.name"))
fmt.Println(j.Get("base.score"))
// Output:
// john
// 100
}
LoadContent
-
说明:
LoadContent
根据给定的内容创建一个Json
对象,它自动检查content
的数据类型,支持的内容类型如下:JSON, XML, INI, YAML和TOML
。 -
格式:
func LoadContent(data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadContent() {
jsonContent := `{"name":"john", "score":"100"}`
j, _ := gjson.LoadContent(jsonContent)
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
// Output:
// john
// 100
}
func ExampleLoadContent_UTF8BOM() {
jsonContent := `{"name":"john", "score":"100"}`
content := make([]byte, 3, len(jsonContent)+3)
content[0] = 0xEF
content[1] = 0xBB
content[2] = 0xBF
content = append(content, jsonContent...)
j, _ := gjson.LoadContent(content)
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
// Output:
// john
// 100
}
func ExampleLoadContent_Xml() {
xmlContent := `<?xml version="1.0" encoding="UTF-8"?>
<base>
<name>john</name>
<score>100</score>
</base>`
x, _ := gjson.LoadContent(xmlContent)
fmt.Println(x.Get("base.name"))
fmt.Println(x.Get("base.score"))
// Output:
// john
// 100
}
LoadContentType
-
说明:
LoadContentType
根据给定的内容和类型创建一个Json
对象,支持的内容类型如下:Json, XML, INI, YAML和TOML
。 -
格式:
func LoadContentType(dataType string, data interface{}, safe ...bool) (*Json, error)
- 示例:
func ExampleLoadContentType() {
jsonContent := `{"name":"john", "score":"100"}`
xmlContent := `<?xml version="1.0" encoding="UTF-8"?>
<base>
<name>john</name>
<score>100</score>
</base>`
j, _ := gjson.LoadContentType("json", jsonContent)
x, _ := gjson.LoadContentType("xml", xmlContent)
j1, _ := gjson.LoadContentType("json", "")
fmt.Println(j.Get("name"))
fmt.Println(j.Get("score"))
fmt.Println(x.Get("base.name"))
fmt.Println(x.Get("base.score"))
fmt.Println(j1.Get(""))
// Output:
// john
// 100
// john
// 100
}
IsValidDataType
-
说明:
IsValidDataType
检查给定的dataType
是否是可以用于加载的有效数据内容。 -
格式:
func IsValidDataType(dataType string) bool
- 示例:
func ExampleIsValidDataType() {
fmt.Println(gjson.IsValidDataType("json"))
fmt.Println(gjson.IsValidDataType("yml"))
fmt.Println(gjson.IsValidDataType("js"))
fmt.Println(gjson.IsValidDataType("mp4"))
fmt.Println(gjson.IsValidDataType("xsl"))
fmt.Println(gjson.IsValidDataType("txt"))
fmt.Println(gjson.IsValidDataType(""))
fmt.Println(gjson.IsValidDataType(".json"))
// Output:
// true
// true
// true
// false
// false
// false
// false
// true
}
Valid
-
说明:
Valid
检查data
是否为有效的JSON
数据类型。 参数data
指定JSON
格式数据,可以是bytes
或string
类型。 -
格式:
func Valid(data interface{}) bool
- 示例:
func ExampleValid() {
data1 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
data2 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]`)
fmt.Println(gjson.Valid(data1))
fmt.Println(gjson.Valid(data2))
// Output:
// true
// false
}
Marshal
-
说明:
Marshal
是Encode
的别名。 -
格式:
func Marshal(v interface{}) (marshaledBytes []byte, err error)
- 示例:
func ExampleMarshal() {
data := map[string]interface{}{
"name": "john",
"score": 100,
}
jsonData, _ := gjson.Marshal(data)
fmt.Println(string(jsonData))
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "Guo Qiang",
Age: 18,
}
infoData, _ := gjson.Marshal(info)
fmt.Println(string(infoData))
// Output:
// {"name":"john","score":100}
// {"Name":"Guo Qiang","Age":18}
}
MarshalIndent
-
说明:
MarshalIndent
是json.``MarshalIndent
的别名 。 -
格式:
func MarshalIndent(v interface{}, prefix, indent string) (marshaledBytes []byte, err error)
- 示例:
func ExampleMarshalIndent() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
infoData, _ := gjson.MarshalIndent(info, "", "\t")
fmt.Println(string(infoData))
// Output:
// {
// "Name": "John",
// "Age": 18
// }
}
Unmarshal
-
说明:
Unmarshal
是DecodeTo
的别名。 -
格式:
func Unmarshal(data []byte, v interface{}) (err error)
- 示例:
func ExampleUnmarshal() {
type BaseInfo struct {
Name string
Score int
}
var info BaseInfo
jsonContent := "{\"name\":\"john\",\"score\":100}"
gjson.Unmarshal([]byte(jsonContent), &info)
fmt.Printf("%+v", info)
// Output:
// {Name:john Score:100}
}
Encode
-
说明:
Encode
将任意类型value
序列化为内容为JSON
的byte
数组。 -
格式:
func Encode(value interface{}) ([]byte, error)
- 示例:
func ExampleEncode() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
infoData, _ := gjson.Encode(info)
fmt.Println(string(infoData))
// Output:
// {"Name":"John","Age":18}
}
MustEncode
-
说明:
MustEncode
执行Encode
操作,但如果发生任何错误,它会panic
。 -
格式:
func MustEncode(value interface{}) []byte
- 示例:
func ExampleMustEncode() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
infoData := gjson.MustEncode(info)
fmt.Println(string(infoData))
// Output:
// {"Name":"John","Age":18}
}
EncodeString
-
说明:
EncodeString
将任意类型value
序列化为内容为JSON
的string
。 -
格式:
func EncodeString(value interface{}) (string, error)
- 示例:
func ExampleEncodeString() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
infoData, _ := gjson.EncodeString(info)
fmt.Println(infoData)
// Output:
// {"Name":"John","Age":18}
}
MustEncodeString
-
说明:
MustEncodeString
将任意类型value
序列化为内容为JSON
的string
,但如果发生任何错误,它会panic
。 -
格式:
func MustEncodeString(value interface{}) string
- 示例:
func ExampleMustEncodeString() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
infoData := gjson.MustEncodeString(info)
fmt.Println(infoData)
// Output:
// {"Name":"John","Age":18}
}
Decode
-
说明:
Decode
将JSON
格式的内容data
解码为interface{}
。 参数data
可以是[]byte
或string
。 -
格式:
func Decode(data interface{}, options ...Options) (interface{}, error)
- 示例:
func ExampleDecode() {
jsonContent := `{"name":"john","score":100}`
info, _ := gjson.Decode([]byte(jsonContent))
fmt.Println(info)
// Output:
// map[name:john score:100]
}
DecodeTo
-
说明:
DecodeTo
将JSON
格式的数据data
解码到指定的interface
类型的变量v
中。参数data
可以是[]byte
或string
。参数v
应该是指针类型。 -
格式:
func DecodeTo(data interface{}, v interface{}, options ...Options) (err error)
- 示例:
func ExampleDecodeTo() {
type BaseInfo struct {
Name string
Score int
}
var info BaseInfo
jsonContent := "{\"name\":\"john\",\"score\":100}"
gjson.DecodeTo([]byte(jsonContent), &info)
fmt.Printf("%+v", info)
// Output:
// {Name:john Score:100}
}
DecodeToJson
-
说明:
DecodeToJson
将JSON
格式的数据data
编码为json
对象。参数data
可以是[]byte
或string
。 -
格式:
func DecodeToJson(data interface{}, options ...Options) (*Json, error)
- 示例:
func ExampleDecodeToJson() {
jsonContent := `{"name":"john","score":100}"`
j, _ := gjson.DecodeToJson([]byte(jsonContent))
fmt.Println(j.Map())
// May Output:
// map[name:john score:100]
}
SetSplitChar
-
说明:
SetSplitChar
设置数据访问的层级分隔符。 -
格式:
func (j *Json) SetSplitChar(char byte)
- 示例:
func ExampleJson_SetSplitChar() {
data :=
`{
"users" : {
"count" : 2,
"list" : [
{"name" : "Ming", "score" : 60},
{"name" : "John", "score" : 99.5}
]
}
}`
if j, err := gjson.DecodeToJson(data); err != nil {
panic(err)
} else {
j.SetSplitChar('#')
fmt.Println("John Score:", j.Get("users#list#1#score").Float32())
}
// Output:
// John Score: 99.5
}
SetViolenceCheck
-
说明:
SetViolenceCheck
启用/禁用数据层级访问的暴力检查。 -
格式:
func (j *Json) SetViolenceCheck(enabled bool)
- 示例:
func ExampleJson_SetViolenceCheck() {
data :=
`{
"users" : {
"count" : 100
},
"users.count" : 101
}`
if j, err := gjson.DecodeToJson(data); err != nil {
fmt.Println(err)
} else {
j.SetViolenceCheck(true)
fmt.Println("Users Count:", j.Get("users.count"))
}
// Output:
// Users Count: 101
}
ToJson
-
说明:
ToJson
返回类型为[]byte
的JSON
内容。 -
格式:
func (j *Json) ToJson() ([]byte, error)
- 示例:
func ExampleJson_ToJson() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
j := gjson.New(info)
jsonBytes, _ := j.ToJson()
fmt.Println(string(jsonBytes))
// Output:
// {"Age":18,"Name":"John"}
}
ToJsonString
-
说明:
ToJsonString
返回类型为string
的JSON
内容。 -
格式:
func (j *Json) ToJsonString() (string, error)
- 示例:
func ExampleJson_ToJsonString() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
j := gjson.New(info)
jsonStr, _ := j.ToJsonString()
fmt.Println(jsonStr)
// Output:
// {"Age":18,"Name":"John"}
}
ToJsonIndent
-
说明:
ToJsonIndent
返回类型为[]byte
的带缩进格式的JSON
内容。 -
格式:
func (j *Json) ToJsonIndent() ([]byte, error)
- 示例:
func ExampleJson_ToJsonIndent() {
type BaseInfo struct {
Name string
Age int
}
info := BaseInfo{
Name: "John",
Age: 18,
}
j := gjson.New(info)
jsonBytes, _ := j.ToJsonIndent()
fmt.Println(string(jsonBytes))
// Output:
//{
// "Age": 18,
// "Name": "John"
//}
}