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

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

如何解析yaml并獲取接口深層結(jié)構(gòu)的價(jià)值

如何解析yaml并獲取接口深層結(jié)構(gòu)的價(jià)值

Go
蝴蝶不菲 2023-06-12 16:28:58
我正在嘗試解析此 yaml,但我想獲取values條目run(test1 或 test2)但沒有成功,這是我的工作示例。我有點(diǎn)迷失了 map inside map :( ,這是給定的 yaml,我無法更改...知道我怎么能得到這些值package mainimport (    "fmt"    "log"    "gopkg.in/yaml.v2")var runContent = []byte(`version: "3.2"run-parameters:  before:    run-parameters:      run: test1  after:    run-parameters:      run: test2`)type FTD struct {    Version     string     `yaml:"version,omitempty"`    BuildParams *RunParams `yaml:"run-parameters,omitempty"`}type RunParams struct {    BeforeExec map[string]interface{} `yaml:"before,omitempty"`    AfterExec map[string]interface{} `yaml:"after,omitempty"`}func main() {    runners := &FTD{}    // parse mta yaml    err := yaml.Unmarshal(runContent, runners)    if err != nil {        log.Fatalf("Error : %v", err)    }    for k, v := range runners.BuildParams.BeforeExec {        fmt.Println(k, v.(interface{}))    }}這是工作示例 https://play.golang.org/p/qTqUJy3md0c我也試過這是工作run := runners.BuildParams.BeforeExec["run-parameters"].(map[interface{}]interface{})["run"]      fmt.Println("run: ", run)我試過的是這個(gè)有效但如果run值為空或根本沒有條目會(huì)發(fā)生什么,這將導(dǎo)致轉(zhuǎn)儲(chǔ) 我如何克服這個(gè)問題?
查看完整描述

1 回答

?
白豬掌柜的

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

我試過的是這個(gè)有效但如果運(yùn)行值為空或根本沒有條目會(huì)發(fā)生什么,這將導(dǎo)致轉(zhuǎn)儲(chǔ)我該如何克服這個(gè)問題?


你可以做


runParams, ok := runners.BuildParams.BeforeExec["run-parameters"]


if !ok {

    // handle lack of "run-parameters" in BeforeExec

}


runParamsMap, ok := runParams.(map[interface{}]interface{})


if !ok {

    // handle "run-parameters" not being a map

}


run, ok := runParamsMap["run"]


if !ok {

    // handle lack of "run" inside "run-parameters"

}


runStr, ok := run.(string)


if !ok {

    // handle "run" not being a string

}


fmt.Println("run: ", runStr)

這非常冗長(zhǎng),因此您可以使用類似https://github.com/jmoiron/jsonq 的內(nèi)容,您可以在其中指定嵌套在多個(gè)地圖級(jí)別內(nèi)的所需值的“路徑”。盡管名稱中有“json”,但這個(gè)庫(kù)使用 map[string]interface{} 而不是 json 文件。但請(qǐng)注意,您用于 yaml 解組的庫(kù)結(jié)果不是map[interface{}]interface{},map[string]interface{}您必須使用不同的庫(kù)才能使其與 jsonq 一起使用。


run, err := jsonq.NewQuery(runners.BuildParams.BeforeExec).String("run-parameters", "run")


if err != nil {

    // handle all possible errors in one place

}


fmt.Println("run: ", run)


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

添加回答

舉報(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)