一个强大的json框架
gojson是一个支持数据多种方式读取,智能解析,操作便捷的一个json框架
json
序列与反序列化json
指定字段查找- 支持
json
数据操作 (修改,插入,删除) json
数据可视化
- 性能出色
json
对象相对于其他项目携带的数据(字段)更少- 底层使用大量指针
- 优化的递归函数
- 功能强大
- 支持将任意形式
(嵌套,指针,切片,数组,map,空接口)
的结构体,任意形式的字段(匿名
,导出
,不可导出
)unmarshal成json
格式 - 支持将其他格式
(yaml,toml,xml...)
的数据转化成json
格式 - 支持从文件读取数据
- 支持
tag
校验 json
友好输出- 并发安全
- 支持将任意形式
- 操作便捷
- 函数链式操作,一直...
- 智能解析数据,传进去对象就完事辣
- 函数简洁,所以用户不用对众多的函数选择感到迷茫
展开查看
├── internal ----------------------(内部工具包)
├── conv ----------------------(数据转换)
├── byte.go
├── consts.go
├── interfaces.go
├── map.go
├── string.go
├── encoding ------------------(编码包)
├── ini
├── ini.go
├── toml
├── toml.go
├── xml
├── xml.go
├── yaml
├── yaml.go
├── mutex ---------------------(读写锁)
├── mutes.go
├── regex ---------------------(正则匹配)
├── regex.go
├── type ----------------------(类型相关的操作包)
├── stringx
├── string.go
├── reflection
├── reflection.go
├── structx
├── field.go
├── structx.go
├── const.go ----------------------(常量定义)
├── dump.go -----------------------(数据可视化相关的函数)
├── err.go ------------------------(错误定义)
├── gojson.go ---------------------(用户可操作函数)
├── load.go -----------------------(数据加载相关的函数)
├── operator.go -------------------(json数据相关的操作函数)
├── option.go ---------------------(选项相关的函数)
j:=gojson.New()
// 字符串,[]byte
jsonStr := `{"name": "json", "age": 18}`
yamlStr := `
name: `json`
age: 18
`
j1:=gojson.New().LoadContent(jsonStr)
j2:=gojson.New().LoadContent(yamlStr)
// 结构体
person:= struct {
name string
age int
}{name: "json",age: 18}
j3:=gojson.New().LoadContent(person)
// 切片
sli:=[]interface{}{"json",18,"male"}
j4:=gojson.New().LoadContent(sli)
// map
m:=map[string]interface{}{"name":"json","age":18}
j5:=gojson.New().LoadContent(m)
path:="./example.txt"
j:=gojson.New().LoadFile(path)
// Options
// 把选项结构体从Json对象分离出来,Json携带的数据更少,性能更优
// type Options struct {
// Safe bool // 需要并发安全时开启,使用读写锁
// ContentType string // 设定数据类型,没有设定需要后面程序来判断
// StrNumber bool // 是否将数字判断为字符串
// LoadUnexported bool // 是否加载不可导出字段 // TODO: 待支持
// }
jsonStr := `{"name": "json", "age": 18}`
j:=gojson.New().LoadContentWithOptions(jsonStr, Options{
Safe: true,
ContentType: "json",
StrNumber: true,
LoadUnexported: false,
})
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
jsonStr := `{"name": "json", "age": 18}`
j:=gojson.New().LoadContent(jsonStr)
j.Unmarshal(Person)
jsonStr := `{"name": "json", "age": 18}`
j:=gojson.New().LoadContent(jsonStr)
j.Dump()
/*
output:
{
mu: {
w: {
state: 0,
sema: 0,
},
writerSem: 0,
readerSem: 0,
readerCount: 0,
readerWait: 0,
},
JsonContent: {
"name": "json",
"age": 18,
},
IsValid: true,
}
*/
jsonStr := `{"name": "json", "age": 18}`
j:=gojson.New().LoadContent(jsonStr)
j.DumpContent()
/*
output:
{
"age": 18,
"name": "json",
}
*/
jsonStr := `{"name": "json", "age": 18}`
j := New().LoadContent(jsonStr)
j.DumpWithOptions(j.JsonContent,DumpOption{
WithType: true,
ExportedOnly: false,
})
/*
output:
map[string]interface {}(2) {
string("name"): string(4) "json",
string("age"): float64(18),
}
*/
--------------------------------------------------
jsonStr := `{"name": "json", "age": 18}`
j := New().LoadContent(jsonStr)
fmt.Println(j.Get("name"))
/*
output:
json
*/
--------------------------------------------------
jsonStr := `
[{
"name":"json",
"age":18
},
{
"name":"Bob",
"age":15
}
]
`
j := New().LoadContent(jsonStr)
fmt.Println(j.Get("[0].name"))
/*
output:
json
*/
--------------------------------------------------
jsonStr := `
[{
"name":"json",
"age":18
},
{
"name":"Bob",
"age":15
}
]
`
j := New().LoadContent(jsonStr)
j.Set("[0].age", 20)
fmt.Println(j.Get("[0].age"))
/*
output:
20
*/
jsonStr := `
[{
"name":"json",
"age":18
},
{
"name":"Bob",
"age":15
}
]
`
j := New().LoadContent(jsonStr)
j.Set("[2]", map[string]interface{}{"name": "kate", "age": 21})
j.DumpContent()
/*
output:
[
{
"name": "json",
"age": 18,
},
{
"name": "Bob",
"age": 15,
},
{
"name": "kate",
"age": 21,
},
]
*/
jsonStr := `
[{
"name":"json",
"age":18
},
{
"name":"Bob",
"age":15
}
]
`
j := New().LoadContent(jsonStr)
j.Set("[1]", nil)
j.DumpContent()
/*
output:
[
{
"name": "json",
"age": 18,
},
]
*/
- golang 版本 >= 1.18
-
json的序列化
-
string
,[]byte
的序列化 -
json
格式 -
其他类型的格式(
toml
,yaml
,xml
,ini
)-
toml
-
yaml
-
xml
-
ini
-
-
结构体序列化
-
切片,数组序列化
-
map
序列化 -
多
tag
校验 -
从文件读取
-
发起http请求并读取
-
-
json的反序列化
- 映射到结构体
-
json可视化
- map
- 切片
- 结构体
-
json的数据操作
- 查找
- 修改
- 插入
- 删除
感谢JetBrains提供的Goland支持