簡體   English   中英

從 json unmarshal 類型斷言二維接口數組的更簡單方法

[英]Simpler way to type assert a two-dimensional interface array from 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>]]

解決方案1:

您需要對空 interface{} 類型應用兩次斷言。{}

在此處輸入圖片說明

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM