可使用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的代码非常精彩,推荐读一读。
有疑问加站长微信联系(非本文作者)