【问题标题】:How to Unmarshal and Marshal YAML in Go, while preserving white space?如何在 Go 中解组和编组 YAML,同时保留空白?
【发布时间】:2018-06-06 16:57:02
【问题描述】:

我有一个类似的 YAML

data:
  label1:
    - someval1
    - someval2
  label2:
    - otherval1
    - otehrval2

使用 YAML 解析器“gopkg.in/yaml.v2”

yaml.Unmarshal([]byte(yamlStr), &yamlObj)

# Some works and changes to yamlObj

s, _ := yaml.Marshal(&yamlObj)
fmt.Println(string(s))

这个输出:

data:
  label1:
  - someval1
  - someval2
  label2:
  - otherval1
  - otehrval2

生成的 YAML 是正确的,但对于我的任务,我需要在原始 YAML 中缩进的列表 (- values)。有没有办法保留这些空格和新行?

【问题讨论】:

  • 为什么需要原始缩进?
  • 当您将 YAML 文本解组为 Go 值时,缩进信息会丢失(未存储在内存中),因此如果不标准,再次编组无法重现相同的缩进。

标签: parsing go yaml


【解决方案1】:

我认为保持原始格式非常困难。但作为一种解决方法,您可以将您的结构编组为接近您的输入格式的格式。

gopkg.in/yaml.v3 以更匹配的方式编组为gopkg.in/yaml.v2

这里有一个小例子: https://play.golang.org/p/gjxR83P7p0F 输出:

V2: 
data:
  label1:
  - someval1
  - someval2
  label2:
  - otherval1
  - otehrval2

V3: 
data:
    label1:
        - someval1
        - someval2
    label2:
        - otherval1
        - otehrval2

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2021-09-15
    • 2020-06-23
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多