2 回答
TA贡献1883条经验 获得超3个赞
您应该知道,通过阅读评论,您违反了 YAML 规范,该规范明确规定评论不得传达内容信息。
无论如何,go-yaml v3 提供了yaml.Node中间子结构的类型:
package main
import (
"fmt"
"gopkg.in/yaml.v3"
)
type file struct {
Type string
Description string
Sample yaml.Node
}
var input []byte = []byte(`
type: default
description: test data
sample:
some: # want
complex: # comments
- struct # included
`)
func main() {
var f file
var err error
if err = yaml.Unmarshal(input, &f); err != nil {
panic(err)
}
var out []byte
if out, err = yaml.Marshal(&f.Sample); err != nil {
panic(err)
}
fmt.Println(string(out))
}
这打印
some: # want
complex: # comments
- struct # included
它通过将结构存储到 a中来工作yaml.Node,它确实存储了评论。然后它将节点呈现为独立的 YAML 文档。
您可以通过浏览节点结构来访问评论。
该字符串与原始字符串不同,因为 YAML 在加载时总是会丢失一些信息。如果您需要以精确间距获取值,则确实需要将子树编码为文字块标量,就像您在答案中显示的那样。
TA贡献1936条经验 获得超6个赞
我通过sample在 yaml 中定义为字符串来修改我的方法:
type: default
description: test data
sample: |
some: # want
complex: # comments
- struct # included
这更像是一种解决方法,但是一个简单的...
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报