Golang Go语言中分享一个无需定义结构体解析json的包
Golang Go语言中分享一个无需定义结构体解析json的包
说明
由于长期习惯 PHP 操作 json ,可以直接解析并静默处理异常返回一个默认值,不习惯 Go 需要先定义结构体再解析 json 的方式,于是有了此包。
使用示例
// 获取包:go get github.com/xing393939/jsonobject
jsonContent := {"name":"John", "score":100}
jo := jsonobject.NewJsonObject(jsonContent)
println(jo.GetString(“name”), jo.GetInt(“score”))
jsonContent = [{"name":"John", "score":100}, {"name":"Tom", "score":200}]
jo = jsonobject.NewJsonObject(jsonContent)
joArr := jo.GetJsonObjectSlice()
for _, joRow := range joArr {
println(joRow.GetString(“name”), joRow.GetInt(“score”))
}
类方法说明
类方法是可变参数,如果不传参数,就表示把当前 JsonObject 对象转换成对应的 string 、int 、bool 等;如果传一个参数 arg 则表示获取当前 JsonObject 对象元素键名为 arg 的键值。
类方法 | 如果类型不匹配 |
---|---|
GetString | 返回空字符 |
GetInt | 返回 0 |
GetBool | 返回 false |
GetInt64 | 返回 0 |
GetFloat64 | 返回 0 |
GetInt64 | 返回 0 |
GetJsonObject | * |
GetJsonObjectSlice | 返回空切片 |
更多关于Golang Go语言中分享一个无需定义结构体解析json的包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
但标准库那个也支持这么用,为什么要自己写?
更多关于Golang Go语言中分享一个无需定义结构体解析json的包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
https://github.com/tidwall/gjson 用过这个库,也不用全部解析出来
建议支持 json path 获取多级结构里的值。比如 a.b[3].c 获取 {“a”: {“b”: [null, false, [], {“c”: 123}]}}
这种轮子不是一大堆么
gjson ,jsoniter
而且都不是全量解析的,会比你这种标准库上封装一层快很多
GetInt 返回 0
如果里面的值刚好是 0 呢?🤔
这种库都可以设计得那么脆弱吗
gjson 是真的好用,一行代码的事
我看了 gjson 的实现,也是会给默认值的,这是弱类型语言的思想,需要在使用的时候注意一下
用了 encoding/json 然后 unmarshal 到 interface{}
然后用各种强制转换的糖。
我推荐(根本没人用的,甚至没什么人知道的) rfc6901 (
在Go语言中处理JSON数据时,虽然标准库encoding/json
非常强大且常用,但在某些场景下,我们可能希望避免事先定义结构体来解析JSON数据,尤其是在处理动态或未知结构的JSON时。这时,你可以使用一些第三方库来简化这一过程。
一个广受欢迎且功能强大的包是jsoniter
,它提供了高性能的JSON解析和生成功能,并且支持灵活的数据绑定方式。不过,jsoniter
本身并不直接提供无需定义结构体解析JSON的功能,但你可以结合Go的map[string]interface{}
类型来达到类似效果。
另一个值得推荐的包是gjson
,它专注于从JSON中快速、方便地提取数据,无需定义结构体。gjson
提供了简洁的API,允许你通过JSON路径表达式来访问JSON数据中的任意部分,非常适合处理动态JSON数据。
例如,使用gjson
解析JSON字符串并提取数据:
import (
"fmt"
"github.com/tidwall/gjson"
)
func main() {
jsonStr := `{"name":"John","age":30}`
name := gjson.Get(jsonStr, "name").String()
age := gjson.Get(jsonStr, "age").Int()
fmt.Println("Name:", name, "Age:", age)
}
gjson
还提供了许多其他功能,如数组操作、修改JSON等,非常适合处理复杂的JSON解析任务。在选择包时,请根据你的具体需求权衡性能和功能。