【发布时间】:2021-10-02 19:21:31
【问题描述】:
我必须解析一些 JSON 文件。
问题是:某些字段包含的数据类型因某些外部(已获得)信息而异。
我的问题是:如何使用 golang 执行此操作?
我已经为此寻找了几个小时的解决方案并尝试提出一个解决方案,但我不断收到运行时错误。
另外,我认为类型强制/强制转换可以基于 this post 工作。
我是该语言的新手,所以请您不要太苛刻地回答这个问题。
package main
import (
"encoding/json"
"fmt"
"reflect"
"unsafe"
)
func main() {
birdJson := `{
"blah": "bleh",
"coord" : [[1,2], [3, 4], [22, 5]]
}
`
var result map[string]interface{}
json.Unmarshal([]byte(birdJson), &result)
fmt.Println("result:: ", result)
c := result["coord"]
cv := reflect.ValueOf(c)
ct := reflect.TypeOf(c)
fmt.Println("c value:", cv)
fmt.Println("c type: ", ct)
fmt.Println(cv.Interface().([][]int))
}
输出:
result:: map[blah:bleh coord:[[1 2] [3 4] [22 5]]]
c value: [[1 2] [3 4] [22 5]]
c type: []interface {}
panic: interface conversion: interface {} is []interface {}, not [][]int
goroutine 1 [running]:
main.main()
/Users/maffei/golab/t.go:27 +0x497
exit status 2
【问题讨论】:
-
您并没有真正披露 json 的可变性,但为了进行嵌套类型断言,您可以使用如下库:github.com/Jeffail/gabs