golang json 获取所有key_golang 开源json库使用笔记

前言,最近项目中需要动态解析json字符串,但是golang标准库提供的json需要事先定义好结构体,不太灵活,因此需要调研不依赖于结构体的json库目前golang开源json库各自的优缺点encoding/json, 官方自带的, 文档最多, 易用性差, 性能差go-simplejson, gabs, jason等衍生包, 简单且易用, 易于阅读, 便于维护, 但性能最差easyjson, f...
摘要由CSDN通过智能技术生成

前言,最近项目中需要动态解析json字符串,但是golang标准库提供的json需要事先定义好结构体,不太灵活,因此需要调研不依赖于结构体的json库

目前golang开源json库各自的优缺点

encoding/json, 官方自带的, 文档最多, 易用性差, 性能差

go-simplejson, gabs, jason等衍生包, 简单且易用, 易于阅读, 便于维护, 但性能最差

easyjson, ffjson此类包, 适合固定结构的json, 易用性一般, 维护成本高, 性能特别好

jsonparser 适合动态和固定结构的json, 简单且易用, 维护成本低, 性能极好

以性能的高低排序: jsonparser > easyjson > encoding/json > go-simplejson, gabs, jason

性能测试, 可见jsonparser的github

buger/jsonparser

golang simplejson使用笔记

介绍:

golang标准库的json需要预先定义好结构体,然后才能将json字符串转化为golang的结构体;simplejson这个开源的库可以在不知道json字符串具体结构的情况下进行编码和解码

使用:

import (

simplejson "github.com/bitly/go-simplejson"

)

func case1() {

//初始化*simpleJson.Json对象

sj, err := simplejson.NewJson([]byte(jsonStr))

var v *simpleJson.Json

//获取字段,如果有多级,可以层层嵌套获取

v = sj.Get(字段名1).Get(字段名2)

//将v的值转化为具体类型的值,MustXXX方法一定可以转化成功

//若转化不成功,则转化为该类型的零值

result := v.MustString()

}

func case2() {

//检查某个字段是否存在

_, ok := js.Get("字段名1").CheckGet("字段名2")

if ok {

fmt.Println("存在!")

} else {

fmt.Println("不存在")

}

}

总结:

虽然simplejson可以转化一个未知的json,但想要获取到具体的值,仍然需要知道它的类型,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值