yaml工作常用语法总结

yaml中的| 符号 和 > 符号

  1. 在 YAML 中,| 符号表示标量块(Scalar Block)的开始。它用于表示长文本块或保持多行字符串的格式。

  2. 在 YAML 中,> 符号表示折叠块(Folded Block)的开始。它用于表示将多行文本块折叠为单行,不保留每行的换行符和大部分缩进。

使用 > 符号后,多行文本会被折叠成单行,而换行符会被替换为空格。只有在文本末尾的换行符会被保留。

需要注意的是,只有文本末尾的换行符会被保留。如果希望保留所有换行符和缩进,可以使用 | 符号。

另外,在 YAML 中,您可以同时使用 | 和 \ 进行多行文本块的折叠,并将其折叠到一行中。这样可以保留换行符,并将多行文本合并为一行。

以下是一个示例,展示了如何在 YAML 中使用 | 和 \ 进行多行折叠到一行的写法:

description: |
  This is a long text \
  that spans \
  multiple lines \
  and is folded into a single line.

在上述示例中,使用 | 表示标量块的开始,使用 \ 将多行文本折叠到一行中,保留了原始的换行符。
需要注意的是,\ 符号后面不能有空格,否则会被解析为文本的一部分。

yaml中的 - 符号

在 YAML 中,- 符号用于表示一个列表项(List Item)。它是 YAML 中定义序列(Sequence)的一种方式。

使用 - 符号,可以将多个值组合成一个列表,表示一组相关的项。

fruits:
  - apple
  - banana
  - orange

在上述示例中,fruits 是一个键,- 符号后面的值表示一个列表,包含了三个水果项:apple、banana 和 orange。

注意,每个列表项需要在同一缩进级别下,并且可以包含任意数量的空格缩进。

工作中常遇到的问题

- 命令行中有冒号加空格,导致yaml解析报错

- cd /home/xxx/ && curl -vF "f1=@$(ls -t xxx.install*| head -1)" -H "UploadToken: xxx:vimYNbV-aaa=:fasdfaluZbb" http://192.168.1.1:8888/api/v1/file/upload

问题分析:
在 YAML 中的标量块中使用了冒号:加空格,可能会导致yaml解析问题。因为在 YAML 中,冒号用于表示键值对的分隔符。

经过观察:在 HTTP 请求头中,冒号 : 用于分隔头字段的名称和值。
值中虽然有冒号, UploadToken: 和值中间有个空格。

经过测试,使用postman生成的curl中,也是这么处理的。

curl --location 'http://192.168.1.2:8888/api/v1/file/upload' \
--header 'UploadToken: httpcat:aaaVvimYNbV-YpJ9EFMbbb=:aaakZWFkbGluZSIcccc' \
--form 'f1=@"/C:/Users/xxx/Desktop/syslog.md"'

解决方法:
推荐如下方法:

为了避免 YAML 解析失败,如果您想在 YAML 中表示命令行,可以使用以下两种方式:

您可以将该行放在引号中,以保留原始字符串的格式。例如:

- 'xxxx'

或者,您可以将该行作为纯文本块(Plain Scalar)进行处理,使用 | 或 >- 符号来保留换行符和缩进。例如:

- |
  xxxx

使用上述写法,您可以确保以 - 开头的行被正确解析为字符串,而不会被误解为列表项。

总结:yaml中写命令行字符时候,建议 使用 - | 方式,避免被当前列表项导致一些yaml解析错误问题。

### 使用Java校验YAML字符串的语法正确性 在Java中,可以通过第三方库来验证YAML字符串的语法是否正确。最常用YAML解析库是SnakeYAML,它能够解析和生成YAML格式的数据,并提供详细的错误信息来帮助识别语法问题。 #### 校验YAML字符串的步骤 - 引入SnakeYAML库:通过Maven或Gradle依赖管理工具将SnakeYAML引入到项目中。 Maven依赖: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.30</version> </dependency> ``` - 编写校验代码:使用`Yaml`类尝试加载YAML字符串。如果字符串语法不正确,会抛出异常并附带具体的错误信息。 示例代码如下: ```java import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.parser.ParserException; import org.yaml.snakeyaml.scanner.ScannerException; public class YamlValidator { public static boolean validateYaml(String yamlContent) { try { Yaml yaml = new Yaml(); yaml.load(yamlContent); return true; // YAML语法正确 } catch (ParserException | ScannerException e) { System.err.println("YAML syntax error: " + e.getMessage()); return false; // YAML语法错误 } } public static void main(String[] args) { String validYaml = "key: value"; String invalidYaml = "key: value\n nestedkey without proper indentation"; System.out.println("Valid YAML: " + validateYaml(validYaml)); System.out.println("Invalid YAML: " + validateYaml(invalidYaml)); } } ``` #### 输出示例 当输入无效的YAML字符串时,程序会捕获异常并输出类似以下信息: ``` YAML syntax error: while scanning for the next token found character '@' that cannot start any token. in "<reader>", line 2, column 3: nestedkey without proper indent ... ^ Invalid YAML: false ``` #### SnakeYAML的功能特点 - **详细错误信息**:SnakeYAML会在解析失败时提供具体的错误原因和位置,这对于调试非常有用[^1]。 - **支持多种数据结构**:除了基本的键值对,还支持列表、映射等复杂结构的解析[^2]。 - **灵活配置**:可以自定义解析器的行为,例如设置最大解析深度、启用/禁用特定的YAML特性等。 #### 替代方案 如果希望使用其他工具进行YAML校验,也可以考虑以下选项: - **Jackson YAML模块**:Jackson是一个广泛使用的JSON处理库,其扩展模块`jackson-dataformat-yaml`支持YAML的解析和序列化。虽然主要用于数据绑定,但也可以用于基本的语法检查。 - **在线工具**:对于简单的校验需求,可以直接使用在线YAML校验工具,如[YAML Lint](http://www.yamllint.com/),但它不适用于自动化流程或集成到Java应用程序中。 #### 总结 通过SnakeYAML库,可以在Java应用程序中轻松实现YAML字符串的语法校验。该库不仅提供了强大的解析功能,还能在遇到语法错误时返回详细的错误信息,帮助开发者快速定位问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值