第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法將 []interface{} 轉(zhuǎn)換為 []byte:“interface {}

無法將 []interface{} 轉(zhuǎn)換為 []byte:“interface {}

Go
瀟湘沐 2022-06-27 15:26:37
我正在解析大型 JSON 文件,我需要解析它的子對象items。您可以看到它items的類型[]interface{}:我成功解析了第一個對象map[]string]interface{},但之后我嘗試解析pods["items"]類型中的哪個對象,[]interface{}然后我將它轉(zhuǎn)換[]byte為json.Unmarshal函數(shù),但它失敗了:interface {} 是 []interface [],而不是 []uint8這是重現(xiàn)的代碼:package mainimport (    "encoding/json"    "fmt")var mytest string = `{   "kind":"PodList",   "apiVersion":"v1",   "metadata":{        },   "items":[{         "metadata":{            "name":"super-user-pod5551",            "namespace":"kube-system",            "selfLink":"/api/v1/namespaces/kube-system/pods/super-user-pod5551",            "uid":"fe9cf599-6e82-4a1b-8db5-5e319a58e1da"         },         "spec":{            "volumes":[               {                  "name":"bootstrap-signer-token-dmp5q",                  "secret":{                     "secretName":"bootstrap-signer-token-dmp5q",                     "defaultMode":420                  }               }            ],            "containers":[               {                  "name":"redis",                  "image":"busybox:1.28",                  "resources":{                                       },                  "volumeMounts":[                     {                        "name":"bootstrap-signer-token-dmp5q",                        "readOnly":true,                        "mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"                     }                  ],                  "terminationMessagePath":"/dev/termination-log",                  "terminationMessagePolicy":"File",                  "imagePullPolicy":"IfNotPresent",                  "securityContext":{                     "capabilities":{                        "add":[                           "SYS_TIME"                        ]                     }                  }               }            ],            "restartPolicy":"Always",            "terminationGracePeriodSeconds":30,            "schedulerName":"default-scheduler"         },         }      }    ]}`鏈接到 GoPlayground。
查看完整描述

2 回答

?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊

問題是您沒有像您聲稱的那樣進(jìn)行類型轉(zhuǎn)換。相反,您正在執(zhí)行類型斷言。

由于pods["items"]是 a []interface{},因此您首先需要每個接口具有具體類型,[]byte并對每個接口進(jìn)行斷言,然后將它們收集到 a[]byte中,然后才能執(zhí)行解組。

最終你應(yīng)該創(chuàng)建一個struct你可以簡單地解組的,這將大大簡化你的代碼。

正如其他人所說,您進(jìn)行兩次解組的事實(shí)應(yīng)該表明有更好的方法。


查看完整回答
反對 回復(fù) 2022-06-27
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個贊

在我閱讀了這篇博客中的“任意對象和數(shù)組”之后,我明白了如何去做。


就像@Steven Eckhoff 提到的那樣,我需要將map[string]interface{}對象移動到一個變量中,然后用鍵和值對其進(jìn)行運(yùn)行,我可以按其類型檢查每個值并遍歷這些對象。


以下是解決方案的主要代碼示例:


func main(){


    var pods interface{}

    //var pods PodList

    err := json.Unmarshal([]byte(mytest), &pods)


    if err != nil {

        log.Fatal(err)

    }

    data := pods.(map[string]interface{})

    for k, v := range data {

        switch v := v.(type) {

        case string:

            fmt.Println(k, v, "(string)")

        case float64:

            fmt.Println(k, v, "(float64)")

        case []interface{}:

            fmt.Println(k, "(array):")

            for _, u := range v {

                //fmt.Println("    ", i, u)

                u := u.(map[string]interface{})

                for a,b := range u {

                    if a == "metadata" {

                        b := b.(map[string]interface{})

                        for c,e := range b {

                            if c == "name" {

                                fmt.Println(e)

                            }

                        }

                    }

                    //fmt.Println("    ", a, b)

                }

            }

        default:

            fmt.Println(k, v, "(unknown)")

        }

    }

}

輸出:


kind PodList (string)

apiVersion v1 (string)

metadata map[] (unknown)

items (array):

super-user-pod5551

最好的方法是struct為對象定義,但我有興趣了解如何在沒有struct.


查看完整回答
反對 回復(fù) 2022-06-27
  • 2 回答
  • 0 關(guān)注
  • 592 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號