AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77775369
Accepted
Joe
Joe
Asked: 2024-01-08 07:44:43 +0800 CST2024-01-08 07:44:43 +0800 CST 2024-01-08 07:44:43 +0800 CST

这是有效的 Yaml 列表吗?如何让 YamlDotNet 读取它?

  • 772

我有旧的 C++ 代码,它手动解析 YAML 并有大量的单元测试。我使用 YamlDotNet 将其转换为 C#。但旧代码的特点之一是它可以处理列表中的一些变化。例如,考虑以下列表...

images:
  - image01.png 
  - image02.png
  - image03.png

旧的解析代码可以处理“-”字符和项目之间没有空格的情况。所以它也可以毫无问题地读取这个。

images:
  - image01.png 
  -image02.png
  - image03.png

不幸的是 YamlDotNet 不解析这个。我正在转换专门验证这一点的单元测试,并且 YamlDotNet 抛出 YamlDotnet.Core.SemanticErrorException 并显示此消息

解析块集合时,未找到预期的“-”指示符

但是,如果我然后进去并将空格放回“-”和“image02.png”之间,它就会完美地读取 yaml。

所以我的问题是

  1. 这在技术上是有效的 YAML 吗?也就是说,上面的列表是否总是会导致错误?如果没有,我就去掉单元测试。
  2. 但如果它是有效的 YAML,是否有一个选项可以传递给 YamlDotNet 反序列化器来处理它?
c#
  • 2 2 个回答
  • 45 Views

2 个回答

  • Voted
  1. Best Answer
    pmf
    2024-01-08T08:52:21+08:002024-01-08T08:52:21+08:00

    在 YAML 中,

    • - image01.png(带有空格)将字符串编码image01.png为数组项,而
    • -image02.png仅对字符串-image02.png(包括破折号)进行编码,因此由于其在周围数组上下文中的错误位置而使您的文档无效。

    因此,您的问题的答案是:不,它不是有效的 YAML。请参阅第 2.1节下的YAML 规范。收藏:

    块序列用破折号和空格(“ - ”)指示每个条目。

    • 3
  2. Anthon
    2024-01-08T13:51:43+08:002024-01-08T13:51:43+08:00

    您拥有的是块样式 YAML 中的序列,即 a block sequence,YAML 中的两种块集合样式之一(另一个是block mapping)。将其称为列表(或数组,或加载到您选择的编程语言中的任何内容)使得很难在文档中找到块序列的实际描述,其第一段内容如下:

    块序列只是一系列节点,每个节点都由前导“-”指示符表示。“-”指示符必须与节点之间用空格分隔。如果后跟非空格字符(例如“-42”),这允许“-”用作普通标量中的第一个字符。

    那里的产生规则表明-(称为序列条目指示符)后面不必跟空格,但前提是以下节点为空:

    images:
      - image01.png 
      -
      - image03.png
    

    有效的 YAML 还包括:

    images:
      - image01.png 
       -image02.png
      - image03.png
    

    这里,作为 key 的值的序列images有两个元素:标量image01.png -image02.png和 标量image03.png。

    后一个示例和您所需的输入都涉及在输入中插入一个缺失的空格以获得正确的 YAML,因此真正的 YAML 解析器很难给出错误的良好建议。所以我对“手动”解析出错并不感到惊讶。

    • 1

相关问题

  • Polly DecorlatedJitterBackoffV2 - 如何计算完成所有重试所需的最长时间?

  • Wpf。在 ScrollViewer 中滚动 DataGrid

  • 我在使用 .NET MAUI MVVM 的游戏页面上获得的分数在其他页面上不可见。如何在本地设备中保存分数数据

  • 从 DataTemplate 内部将 TreeView 层次结构与 HierarchicalDataTemplate 结合使用

  • 如何改进 .NET 中的验证接口?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve