亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何從我的 yaml 文件訪問“map[string]interface {}”數據

如何從我的 yaml 文件訪問“map[string]interface {}”數據

Go
紅顏莎娜 2023-03-15 13:53:07
我有一個 yaml 文件,我正在嘗試讀入并循環提取一些數據。我的 yaml 示例---THE/NAME/DOESNT/MATTER:  TEST_NAME: THIS/IS/WHAT/IS/DISPLAYS/ON/THE/HTML  RUN_PATH: example/testfiles/release  SOMETHING_ELSE: [1,2,3]ANOTHER/PATH/LIKE/STRING:  TEST_NAME: USED/FOR/THE/HTML  RUN_PATH: example/testfiles/foo我的代碼package mainimport (    "fmt"    "os"    "io/ioutil"    "gopkg.in/yaml.v3")func main() {    reportYAML := os.Args[1]    // userDictionary := os.Args[2]    yfile, err := ioutil.ReadFile(reportYAML)    if err != nil {        fmt.Printf("ERROR: Unable to open yaml file : %s\n", err)    }    data := make(map[interface{}]interface{})    error := yaml.Unmarshal([]byte(yfile), &data)    if error != nil {        fmt.Printf("ERROR: Unable to read yaml file : %s\n", err)    }    for _, value := range data {        fmt.Printf("%T\n", value)    }    }yaml 將以類似的模式重復,我正在嘗試提取 TEST_NAME 和 RUN_PATH。帶 %T 的 Printf 給我map[string]interface {}和 %smap[RUN_PATH:example/testfiles/release SOMETHING_ELSE:[%!s(int=1) %!s(int=2) %!s(int=3)] TEST_NAME:THIS/IS/WHAT/IS/DISPLAYS/ON/THE/HTML]我一直在嘗試value["TESTNAME"]、value.(string)["TESTNAME"]和value["TESTNAME"].(string)其他一些變體,但它們都給我錯誤。我知道這是一個簡單的問題,但我對 GO 的經驗很少,無法從以前類似的 stackoverflow 帖子中解決附加上下文:每個 yaml 頂級鍵將包含多個鍵:值對,但我只對 TEST_NAME 和 RUN_PATH 感興趣
查看完整描述

1 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

如果您只關心幾個特定的鍵,只需創建一個數據結構來公開這些值:


package main


import (

    "fmt"

    "io/ioutil"

    "os"


    "gopkg.in/yaml.v3"

)


type (

    Entry struct {

        TestName string `yaml:"TEST_NAME"`

        RunPath  string `yaml:"RUN_PATH"`

    }

)


func main() {

    reportYAML := os.Args[1]

    // userDictionary := os.Args[2]


    yfile, err := ioutil.ReadFile(reportYAML)

    if err != nil {

        fmt.Printf("ERROR: Unable to open yaml file : %s\n", err)

    }

    data := make(map[string]Entry)

    error := yaml.Unmarshal([]byte(yfile), &data)

    if error != nil {

        fmt.Printf("ERROR: Unable to read yaml file : %s\n", err)

    }

    for _, value := range data {

        fmt.Printf("test_name: %s\n", value.TestName)

        fmt.Printf("run_path: %s\n", value.RunPath)

    }

}

針對您的示例數據運行上述代碼會產生:


test_name: THIS/IS/WHAT/IS/DISPLAYS/ON/THE/HTML

run_path: example/testfiles/release

test_name: USED/FOR/THE/HTML

run_path: example/testfiles/foo


查看完整回答
反對 回復 2023-03-15
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號