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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在golang中動(dòng)態(tài)創(chuàng)建嵌套地圖

在golang中動(dòng)態(tài)創(chuàng)建嵌套地圖

Go
慕姐8265434 2023-06-01 18:17:27
我正在嘗試在 Golang 中解釋 JSON。我正在搜索未知 JSON 中的特定屬性,我知道它的鍵,但我的 JSON 可能真的是嵌套的。我確實(shí)知道我的 JSON 中有多少“層”。例如,如果我的 JSON 是:nestedJson = { key1: { key2: { key3: "Found data" } } } 我的鍵是 ["key1", "key2", "key3"] 并且這個(gè) JSON 中有 3 層,所以我可以通過這樣做來取回?cái)?shù)據(jù)var nestedJson = []map[string]map[string]map[string]interface{}json.Unmarshal([]byte(nestedJon), &nestedJson)data := nestedJson["key1]["key2"]["key3"]我想要做的是通過為應(yīng)該搜索的層數(shù)指定一個(gè)整數(shù)值來動(dòng)態(tài)創(chuàng)建 nestedJson 對(duì)象。有人能幫忙嗎?如果我還不夠清楚,請(qǐng)告訴我!
查看完整描述

2 回答

?
鴻蒙傳說

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

一般來說,對(duì)于這種情況,您必須json.Unmarshal使用interface{}.


b := []byte(`{ "key1": { "key2": { "key3": "Found data" } } } `)

var f interface{}

if err := json.Unmarshal(b, &f); err != nil {

    panic(err)

}

fmt.Println(f)

現(xiàn)在您可以使用一堆類型斷言來探索f,例如查找它包含哪些鍵:


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

for k, v := range m {

    if k == "key3" {

        fmt.Println("found key3. maps to", v)

    }

}

如果您在此級(jí)別找不到 key3,請(qǐng)使用遞歸檢查所有值 -它們是否與 key3 鍵映射,等等......類似


func findNested(m map[string]interface{}, s string) (bool, interface{}) {

    // Try to find key s at this level

    for k, v := range m {

        if k == s {

            return true, v

        }

    }

    // Not found on this level, so try to find it nested

    for _, v := range m {

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

        found, val := findNested(nm, s)

        if found {

            return found, val

        }

    }

    // Not found recursively

    return false, nil

}

注意:此功能很快被破解在一起,可能會(huì)錯(cuò)誤處理一堆極端情況。它在這里展示了關(guān)鍵思想 - 將其用作滿足您特定需求的基礎(chǔ)


查看完整回答
反對(duì) 回復(fù) 2023-06-01
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

我個(gè)人喜歡使用gabs模塊,它可以以更人性化的方式處理這些情況。


要安裝模塊,請(qǐng)使用:

go?get?github.com/Jeffail/gabs/v2

方便的使用示例

// jsonParsed var contains a set of functions to play arround

jsonParsed, _ := gabs.ParseJSON([]byte(`{

? ? "outter":{

? ? ? ? "inner":{

? ? ? ? ? ? "value1":10,

? ? ? ? ? ? "value2":22

? ? ? ? },

? ? ? ? "alsoInner":{

? ? ? ? ? ? "value1":20,

? ? ? ? ? ? "array1":[

? ? ? ? ? ? ? ? 30, 40

? ? ? ? ? ? ]

? ? ? ? }

? ? }

}`))


// for your case, it's useful Exists or ExistsP functions

exists := jsonParsed.Exists("outter", "inner", "value1")

// exists == true


exists = jsonParsed.ExistsP("outter.inner.value3")

// exists == false

當(dāng)您需要一些動(dòng)態(tài)鍵搜索時(shí),您可以使用 ChildrenMap 函數(shù)通過前面解釋的函數(shù)迭代和驗(yàn)證鍵的存在。


jsonParsed, err := gabs.ParseJSON([]byte(`{"object":{"first":1,"second":2,"third":3}}`))

if err != nil {

? ? panic(err)

}


// S is shorthand for Search

for key, child := range jsonParsed.S("object").ChildrenMap() {

? ? fmt.Printf("key: %v, value: %v\n", key, child.Data().(float64))

? ? // here you can use Exists or ExistsP

}

// key: first, value: 1

// key: second, value: 2

// key: third, value: 3


查看完整回答
反對(duì) 回復(fù) 2023-06-01
  • 2 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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