golang 如何读取 一个不确定的json中的值?

各位好,我用golang获取一个不确定的json,并解析,因为json里的数据每次可能都不一样,没有办法用struct结构体的方式获取,于是使用了其他方法,http://songran.net/2017/03/08... 我参考这个,用一个interface,把json转成byte后 println这个接口,看到了所有数据。但是我无法使用,不知道如何调取里边的值,求如何获取一个不确定的json解析后数据的方法,谢谢
因为是json 都是key value 的 读出来后 第一层一看就是 map 但是通过map的方法获取不到

阅读 9.3k
2 个回答

https://github.com/bitly/go-s...
我更推荐用已经封装好的包,如果不是为了学习,没必要搞那么底层.
这个包有GetGetPath方法以及对应的set方法.

新手上路,请多包涵

interface{}解析出来的是map[string]interface{}格式,只需要断言打印即可,如下:
package main

import (

"encoding/json"
"fmt"

)

func main() {

s := `{
"tagA" : "json string",  
"tagB" : 1024, 
"tagC" : null, 
"tagD" : {
    "tagE" : 2147483648, 
    "tagF" : 3.14159265358979
},
"tagG" : [
    "json array",
   1024,
    {"tagH" : "json object"}
]

}`

var i interface{}
err := json.Unmarshal([]byte(s), &i)
if err != nil {
    fmt.Println(err)
}
fmt.Println(i)

Assert(i)

}

func Assert(i interface{}) {

switch t := i.(type) {
case map[string]interface{}:
    for k, v := range t {
        switch t1 := v.(type) {
        case map[string]interface{}:
            fmt.Println(k, " : ")
            Assert(t1)
        case []interface{}:
            fmt.Println(k, " : ")
            for k1, v1 := range t1 {
                switch t2 := v1.(type) {
                case map[string]interface{}:
                    fmt.Println(k1, " : ")
                    Assert(t2)
                default:
                    fmt.Println(k1, " : ", v1)
                }
            }
        default:
            fmt.Println(k, " : ", v)
        }
    }
}

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏