
由于长期习惯 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 | 返回空切片 |
1 liuhan907 2021-12-01 22:44:52 +08:00 via Android 但标准库那个也支持这么用,为什么要自己写? |
2 creedowl 2021-12-01 22:46:49 +08:00 https://github.com/tidwall/gjson 用过这个库,也不用全部解析出来 |
3 est 2021-12-01 22:52:32 +08:00 建议支持 json path 获取多级结构里的值。比如 a.b[3].c 获取 {"a": {"b": [null, false, [], {"c": 123}]}} |
4 unixeno 2021-12-02 01:24:07 +08:00 via Android 这种轮子不是一大堆么 gjson ,jsoniter 而且都不是全量解析的,会比你这种标准库上封装一层快很多 |
5 Kilerd 2021-12-02 08:41:02 +08:00 via iPhone GetInt 返回 0 如果里面的值刚好是 0 呢? 这种库都可以设计得那么脆弱吗 |
6 qq1340691923 2021-12-02 10:36:08 +08:00 gjson 是真的好用,一行代码的事 |
7 xing393939 OP @Kilerd 我看了 gjson 的实现,也是会给默认值的,这是弱类型语言的思想,需要在使用的时候注意一下 |
8 2i2Re2PLMaDnghL 2021-12-02 13:10:38 +08:00 |