从json解组类型断言二维接口数组的简单方法

问题描述 投票:0回答:1

我需要将其中具有[] [] 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>]]
json go type-assertion
1个回答
0
投票

解决方案1:

您需要在空接口上使用两次断言{}类型。

enter image description here

https://play.golang.org/p/AeV6_fC3vYI

© www.soinside.com 2019 - 2024. All rights reserved.