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

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

有沒有辦法將 yaml 節點添加到 golang 中現有的 yaml 文檔?

有沒有辦法將 yaml 節點添加到 golang 中現有的 yaml 文檔?

Go
動漫人物 2023-02-21 16:31:21
我正在閱讀帶有 goyaml lib 的 yaml 文件。如果要添加的密鑰不存在,我打算修改它的一些條目并添加一個條目。例如原始yamlroot:   entry1: val11 個模組和 1 個添加目標 yamlroot:  entry1: valUpdated  entry2: newkey added我找不到任何可以讓我向 yaml 添加節點的 yaml 庫。
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

如果您解組為: ,您可以使用go-yamlyaml.Node執行此操作:

package main


import (

    "os"


    "gopkg.in/yaml.v3"

)


var input = []byte(`root:

  entry1: val1`)


func main() {

    var document yaml.Node

    if err := yaml.Unmarshal(input, &document); err != nil {

        panic(err)

    }

    data := document.Content[0]

    var rootVal *yaml.Node

    for i := 0; i < len(data.Content); i += 2 {

        node := data.Content[i]

        if node.Kind == yaml.ScalarNode && node.Value == "root" {

            rootVal = data.Content[i+1]

            break

        }

    }

    if rootVal == nil {

        panic("root key missing")

    }


    found := false

    for i := 0; i < len(rootVal.Content); i += 2 {

        node := rootVal.Content[i]

        if node.Kind != yaml.ScalarNode {

            continue

        }

        switch node.Value {

        case "entry1":

            rootVal.Content[i+1].SetString("valUpdated")

        case "entry2":

            found = true

        }

    }

    if !found {

        var key, value yaml.Node

        key.SetString("entry2")

        value.SetString("newkey added")

        rootVal.Content = append(rootVal.Content, &key, &value)

    }

    out, err := yaml.Marshal(data)

    if err != nil {

        panic(err)

    }

    os.Stdout.Write(out)

}

輸出:


root:

    entry1: valUpdated

    entry2: newkey added

游樂場鏈接

Unmarshal獲取一個以根節點作為唯一內容節點的文檔節點。Marshal期望根節點作為數據,所以你輸入data而不是document輸入它。我不太確定為什么 API 是這樣的。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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