1

我的应用程序正在加载和分析一个嵌套的 YAML 文件,使用 RepresentationModel 提取每个键/值对。一些将被更改,然后我写回 YAML 文件。输入文件为:

account: 
  menu: 
    dev: "Device Settings" # Item comment 1
    port: "Portal Accounts"
    prof: "Personal Information"
  ports: 
# Comment line
    desc: "Below is a list of available portals. You can use the sections below to manage each portal account."
    det: "Manage Accounts"
    no_enabled: "No portals are currently enabled."
    ti: "Account Access"
  pro: 
    ti: Information

但输出文件看起来像

account:
  menu:
    dev: Device Settings changed
    port: Portal Accounts changed
    prof: Personal Information changed
  ports:
    desc: Below is a list of available portals. You can use the sections below to manage each portal account. changed
    det: Manage Accounts changed
    no_enabled: No portals are currently enabled.
    &1735269872 ti: Account Access
  pro:
    ti: Information
  • 使用 Yaml.Save() 时如何保留输入文件中的双引号?
  • 这个奇怪的数字 &1735269872 是什么以及如何防止它在保存 YAML 时被写入?在较长的文件中,其他数字出现在不同的位置。
  • 是否可以在浏览 YAML 时保留评论,甚至更好地访问它们?
4

1 回答 1

0

那个“奇怪”的数字是一个标准的 YAML锚点,通常只有递归数据引用才需要。唯一奇怪的是为什么您的 C# YAML 库将其插入此处,因为没有相应的别名指向它。可能是因为ti文件中稍后出现的密钥而混淆了,但没有实际的节点别名来引用&1735269872完全多余的锚点。

YAML 规范明确指出

评论是演示细节,不得用于传达内容信息

除了我的ruamel.yaml(对于 Python)之外,我知道的所有库都会丢弃文件中的注释,这是更容易做的事情(如果注释出现在文件的开头,有些会保留注释。

但是,即使是用于往返输入 YAML 的 ruamel.yaml 也不会保留输入中值标量周围的不必要引号并标准化字符串的输出。自 3.6.0 版起,yamldotnet 支持设置通过 YamlMember 属性指定的标量属性,但我找不到如何完成此操作的示例。但是,使用它很可能也会影响您的标量键。您在标量周围不一致地使用引号将需要在单个字符串的基础上保留引用知识。

也许您应该问问自己,由于这种不一致,您在清晰度方面失去了什么,并接受无处不在的非引号字符串标量,而不仅仅是在我们输入的某些地方。

ruamel.yaml如果您可以从 C# 程序中调用它的 Python 功能,可能会对您有所帮助,但我自己从未尝试过这个方向(只是反过来)。

于 2016-03-11T15:52:04.337 回答