How does golang read the value in an indeterminate json?
Hello everyone, I use golang to get an uncertain json, and parse it, because the data in json may be different each time, and there is no way to get it in the way of struct structure, so I use other methods, http://songran.net/2017/03/08.. I refer to this and use an interface,. Println this interface after converting json to byte, and see all the data. But I can"t use it. I don"t know how to call the value inside and find out how to get an uncertain json parsed data. Thank you
because the json is all key value and the first layer looks like map, but you can"t get it through the map method
.
https://github.com/bitly/go-s.
I prefer to use packaged packages. If not for learning, there is no need to do so at the bottom.
this package has Get
and GetPath
methods and corresponding set methods.
interface {} parses the map [string] interface {} format, which only needs to be printed with assertions, as follows:
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)
}
}
}
}