go语言json操作
铁哥 · · 4997 次点击 · · 开始浏览可使用go语言官方的package中的"encoding/json"来处理json数据,详细可以参考json包的示例。
还有一种更简单直接的方法,使用github.com/bitly/go-simplejson包,这个包封装了encoding/json里的Unmarshal和Marshal方法,提供更易用的接口。
地址:https://github.com/bitly/go-simplejson
文档:http://godoc.org/github.com/bitly/go-simplejson
具体用法可以参考包里的测试代码:simplejson_test.go,非常方便。
package main
import (
"fmt"
"github.com/bitly/go-simplejson"
"strconv"
)
func main() {
js, err := simplejson.NewJson([]byte(`{
"test": {
"string_array": ["asdf", "ghjk", "zxcv"],
"array": [1, "2", 3],
"arraywithsubs": [{"subkeyone": 1},
{"subkeytwo": 2, "subkeythree": 3}],
"int": 10,
"float": 5.150,
"bignum": 9223372036854775807,
"string": "simplejson",
"bool": true
}
}`))
if err != nil {
panic("json format error")
}
s, err := js.Get("test").Get("string").String()
if err != nil {
fmt.Println("decode error: get int failed!")
return
}
fmt.Println(s)
// 检查key是否存在
_, ok := js.CheckGet("missing_key")
if ok {
fmt.Println("key missing_key exists")
} else {
fmt.Println("key missing_key not exists")
}
arr, err := js.Get("test").Get("array").Array()
if err != nil {
fmt.Println("decode error: get array failed!")
return
}
for _, v := range arr {
var iv int
switch v.(type) {
case float64:
iv = int(v.(float64))
fmt.Println(iv)
case string:
iv, _ = strconv.Atoi(v.(string))
fmt.Println(iv)
}
}
}
一个需要注意的地方是,INT值被json的Unmarshal解出来后,类型为float64。
simplejson的代码非常精彩,推荐读一读。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
可使用go语言官方的package中的"encoding/json"来处理json数据,详细可以参考json包的示例。
还有一种更简单直接的方法,使用github.com/bitly/go-simplejson包,这个包封装了encoding/json里的Unmarshal和Marshal方法,提供更易用的接口。
地址:https://github.com/bitly/go-simplejson
文档:http://godoc.org/github.com/bitly/go-simplejson
具体用法可以参考包里的测试代码:simplejson_test.go,非常方便。
package main
import (
"fmt"
"github.com/bitly/go-simplejson"
"strconv"
)
func main() {
js, err := simplejson.NewJson([]byte(`{
"test": {
"string_array": ["asdf", "ghjk", "zxcv"],
"array": [1, "2", 3],
"arraywithsubs": [{"subkeyone": 1},
{"subkeytwo": 2, "subkeythree": 3}],
"int": 10,
"float": 5.150,
"bignum": 9223372036854775807,
"string": "simplejson",
"bool": true
}
}`))
if err != nil {
panic("json format error")
}
s, err := js.Get("test").Get("string").String()
if err != nil {
fmt.Println("decode error: get int failed!")
return
}
fmt.Println(s)
// 检查key是否存在
_, ok := js.CheckGet("missing_key")
if ok {
fmt.Println("key missing_key exists")
} else {
fmt.Println("key missing_key not exists")
}
arr, err := js.Get("test").Get("array").Array()
if err != nil {
fmt.Println("decode error: get array failed!")
return
}
for _, v := range arr {
var iv int
switch v.(type) {
case float64:
iv = int(v.(float64))
fmt.Println(iv)
case string:
iv, _ = strconv.Atoi(v.(string))
fmt.Println(iv)
}
}
}
一个需要注意的地方是,INT值被json的Unmarshal解出来后,类型为float64。
simplejson的代码非常精彩,推荐读一读。