一个很好用的Golang Json库

W1llyu · · 3927 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# 库名 [ourjson](https://github.com/W1llyu/ourjson) https://github.com/W1llyu/ourjson ## 官方的做法 官方的做法主要是一整个json放一起解析,需要提前定义好struct来承载 或者用一个map[string]interface来承载,获取value时转成相应的类型。 但是在一些多层嵌套的json场景下,需要提前定义n个不需要的结构体去获得子json对象的某个值,就比较麻烦。 ourjson这个库有点类似java里面的JSONObject,下面是例子 ## 例子 ```go package main import ( "fmt" "github.com/W1llyu/ourjson" ) func main() { defer func() { if err := recover(); err != nil { fmt.Println(err) } }() jsonStr := `{ "user": { "name": "aa", "age": 10, "phone": "12222222222", "emails": [ "aa@164.com", "aa@165.com" ], "address": [ { "number": "101", "now_live": true }, { "number": "102", "now_live": null } ], "account": { "balance": 999.9 } } } ` jsonObject, err := ourjson.ParseObject(jsonStr) fmt.Println(jsonObject, err) user := jsonObject.GetJsonObject("user") fmt.Println(user) name, err := user.GetString("name") fmt.Println(name, err) phone, err := user.GetInt64("phone") fmt.Println(phone, err) age, err := user.GetInt64("age") fmt.Println(age, err) account := user.GetJsonObject("account") fmt.Println(account) balance, err := account.GetFloat64("balance") fmt.Println(balance, err) email1, err := user.GetJsonArray("emails").GetString(0) fmt.Println(email1, err) address := user.GetJsonArray("address") fmt.Println(address) address1nowLive, err := user.GetJsonArray("address").GetJsonObject(0).GetBoolean("now_live") fmt.Println(address1nowLive, err) address2, err := address.Get(1) fmt.Println(address2, err) address2NowLive, err := address2.JsonObject().GetNullBoolean("now_live") fmt.Println(address2NowLive, err) } ```

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3927 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传