Go-json解码到接口及根据键获取值
生活随笔
收集整理的這篇文章主要介紹了
Go-json解码到接口及根据键获取值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Go-json解碼到接口及根據鍵獲取值
package mainimport ("encoding/json""fmt""github.com/bitly/go-simplejson" )type JsonServer struct {ServerName stringServerIP string }type JsonServers struct {Servers []JsonServer }func main() {var s JsonServersstr := `{"servers":[{"serverName":"Shanghai_VPN","serverIP":"127.0.0.1"},{"serverName":"Beijing_VPN","serverIP":"127.0.0.2"}]}`json.Unmarshal([]byte(str), &s)fmt.Println(s) //{[{Shanghai_VPN 127.0.0.1} {Beijing_VPN 127.0.0.2}]}b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)var f interface{}json.Unmarshal(b, &f)fmt.Printf("%+v\n", f) // map[Name:Wednesday Age:6 Parents:[Gomez Morticia]]m := f.(map[string]interface{})for k, v := range m {switch vv := v.(type) {case string:fmt.Println(k, "is string", vv) //Name is string Wednesdaycase int:fmt.Println(k, "is int", vv)case float64:fmt.Println(k, "is float64", vv) //Age is float64 6case []interface{}:fmt.Println(k, "is an array:") //Parents is an array://0 Gomez//1 Morticiafor i, u := range vv {fmt.Println(i, u)}default:fmt.Println(k, "is of a type I don't know how to handle")}}/**如您所見,我們現在可以通過interface{}解析未知格式的JSON并鍵入斷言。以上示例是官方解決方案,但類型斷言并不總是方便。因此,我推薦一個名為simplejson的開源項目,由bitly創建和維護。以下是如何使用此項目處理未知格式的JSON的示例:go get ithub.com/bitly/go-simplejson*/// 根據鍵獲取值js, err := simplejson.NewJson([]byte(`{"test": {"array": [1, "2", 3],"int": 10,"float": 5.150,"bignum": 9223372036854775807,"string": "simplejson","bool": true} }`))if err != nil {fmt.Println("err:", err)}arr, _ := js.Get("test").Get("array").Array() //arr: [1 2 3]fmt.Println("arr:", arr)i, _ := js.Get("test").Get("int").Int() //i: 10fmt.Println("i:", i)ms := js.Get("test").Get("string").MustString() //ms: simplejsonfmt.Println("ms:", ms) }json解碼到接口
package mainimport ("encoding/json""fmt" )func main() {jsonBuf := `{"company": "itcast","subjects": ["Go","C++","Python","Test"],"isok": true,"price": 666.666}`//創建一個mapm := make(map[string]interface{}, 4)err := json.Unmarshal([]byte(jsonBuf), &m)if err != nil {fmt.Println("err=", err)return}fmt.Println("m=", m) //m= map[company:itcast subjects:[Go C++ Python Test] isok:true price:666.666]fmt.Printf("m=%+v\n", m) //m=map[isok:true price:666.666 company:itcast subjects:[Go C++ Python Test]]var s strings = m["company"].(string)fmt.Println("s= ", s) //s= itcastvar s1 bools1 = m["isok"].(bool)fmt.Println("s1= ", s1) //s1= truevar s2 float64s2 = m["price"].(float64)fmt.Println("s2= ", s2) //s2= 666.666var str string//類型斷言for key, value := range m {// fmt.Printf("%v===>%v\n", key, value)switch data := value.(type) {case string:str = datafmt.Printf("map[%s]的值類型為string,內容為%s\n", key, str)case bool:fmt.Printf("map[%s]的值類型為bool,內容為%v\n", key, data)case float64:fmt.Printf("map[%s]的值類型為float64,內容為%v\n", key, data)case []string:fmt.Printf("map[%s]的值類型為[]stiring1,內容為%v\n", key, data)case []interface{}:fmt.Printf("map[%s]的值類型為[]stiring2,內容為%v\n", key, data)}/*map[company]的值類型為string,內容為itcastmap[subjects]的值類型為[]stiring2,內容為[Go C++ Python Test]map[isok]的值類型為bool,內容為truemap[price]的值類型為float64,內容為666.666*/} }轉載于:https://www.cnblogs.com/Paul-watermelon/p/11210526.html
總結
以上是生活随笔為你收集整理的Go-json解码到接口及根据键获取值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到一窝死老鼠是什么意思
- 下一篇: 压缩/批量压缩/合并js文件