从 json unmarshal 键入断言二维接口数组的更简单方法

我需要用 [][]interface{} 数组解组复杂的 json 数据。我想使用更抽象的结构类型来解组它,但 Golang 只能将其识别为 []interface{}。


示例代码:


// I want to use this, but not work

var r1 = struct {

    Data map[string]interface{}

}{}


// Works well, but too complex if data nest much

var r2 = struct {

    Data struct{

        P1 int64

        P2 [][]interface{}

    }

}{}


jsonData := []byte(`{"data" :{"p1": 0, "p2":[["1", null], ["2", null] ]}}`)


json.Unmarshal (jsonData, &r1)

_, ok := r1.Data["p2"].([][]interface{})

fmt.Println(ok)


fmt.Println("======")


_, ok = r1.Data["p2"].([]interface{})

fmt.Println(ok)


fmt.Println("======")


json.Unmarshal (jsonData, &r2)

fmt.Println(r2.Data.P2)

输出:


false

======

true

======

[[1 <nil>] [2 <nil>]]


汪汪一只猫
浏览 169回答 1
1回答

一只甜甜圈

解决方案1:您需要对空的 interface{} 类型应用两次断言。https://play.golang.org/p/AeV6_fC3vYI
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go