Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
gjson
模块除了最基础支持的JSON
数据格式创建Json
对象,还支持常用的数据格式内容创建Json
对象。支持的数据格式为:JSON
, XML
, INI
, YAML
, TOML
,PROPERTIES
。此外,也支持直接通过struct
对象创建Json
对象。
对象创建常用New
和Load*
方法,更多的方法请查看接口文档:https://pkg.go.dev/github.com/gogf/gf/v2/encoding/gjson
使用New
方法创建
通过JSON
数据创建
Code Block | ||
---|---|---|
| ||
jsonContent := `{"name":"john", "score":"100"}` j := gjson.New(jsonContent) fmt.Println(j.Get("name")) fmt.Println(j.Get("score")) // Output: // john // 100 |
通过XML
数据创建
Code Block | ||
---|---|---|
| ||
jsonContent := `<?xml version="1.0" encoding="UTF-8"?><doc><name>john</name><score>100</score></doc>` j := gjson.New(jsonContent) // Note that there's root node in the XML content. fmt.Println(j.Get("doc.name")) fmt.Println(j.Get("doc.score")) // Output: // john // 100 |
通过Strcut
对象创建
Code Block | ||
---|---|---|
| ||
type Me struct { Name string `json:"name"` Score int `json:"score"` } me := Me{ Name: "john", Score: 100, } j := gjson.New(me) fmt.Println(j.Get("name")) fmt.Println(j.Get("score")) // Output: // john // 100 |
自定义Struct
转换标签
Code Block | ||
---|---|---|
| ||
type Me struct { Name string `tag:"name"` Score int `tag:"score"` Title string } me := Me{ Name: "john", Score: 100, Title: "engineer", } // The parameter <tags> specifies custom priority tags for struct conversion to map, // multiple tags joined with char ','. j := gjson.NewWithTag(me, "tag") fmt.Println(j.Get("name")) fmt.Println(j.Get("score")) fmt.Println(j.Get("Title")) // Output: // john // 100 // engineer |
使用Load*
方法创建
最常用的是Load
和LoadContent
方法,前者通过文件路径读取,后者通过给定内容创建Json
对象。方法内部会自动识别数据格式,并自动解析转换为Json
对象。
通过Load
方法创建
JSON
文件Code Block language go jsonFilePath := gdebuggtest.TestDataPathDataPath("json", "data1.json") j, _ := gjson.Load(jsonFilePath) fmt.Println(j.Get("name")) fmt.Println(j.Get("score"))
XML
文件Code Block language go jsonFilePath := gdebuggtest.TestDataPathDataPath("jsonxml", "data1.xml") j, _ := gjson.Load(jsonFilePath) fmt.Println(j.Get("doc.name")) fmt.Println(j.Get("doc.score"))
通过LoadContent
创建
Code Block | ||
---|---|---|
| ||
jsonContent := `{"name":"john", "score":"100"}` j, _ := gjson.LoadContent(jsonContent) fmt.Println(j.Get("name")) fmt.Println(j.Get("score")) // Output: // john // 100 |
Panel | ||
---|---|---|
| ||
|