如何在 YAML 中将字符串分成多行并保留空格?

Joe*_*Joe 6 string yaml

请注意,这个问题与此类似,但仍然不同,因此这些答案无法解决我的问题:

  • 为了插入例如控制字符\x08,似乎我必须使用双引号"
  • 所有空间都需要完全按照给定的方式保留。对于换行符,我明确使用\n.

我有一些字符串数据需要存储在 YAML 中,例如:

  • " This is my quite long string data "
  • "This is my quite long string data"
  • "This_is_my_quite_long_string_data"
  • "Sting data\nwhich\x08contains control characters"

并在 YAML 中需要它,如下所示:

Key: "  This  is  my" +
     "  quite  long " +
     " string  data  "
Run Code Online (Sandbox Code Playgroud)

只要我留在单行上,这就没问题,但我不知道如何将字符串内容放在多行上。

YAML 块标量样式 ( >, |) 在这里没有帮助,因为它们不允许转义,甚至会执行一些空格剥离、换行符/空格替换,这对我的情况毫无用处。

看起来唯一的方法似乎是使用双引号"和反斜杠\,如下所示:

Key: "\
  This is \
  my quite \
  long string data\
  "
Run Code Online (Sandbox Code Playgroud)

在YAML 在线解析器中尝试此操作会得到"This is my quite long string data"预期的结果。

但不幸的是,如果“子行”之一具有前导空格,则它会失败,如下所示:

Key: "\
  This is \
  my quite\
   long st\
  ring data\
  "
Run Code Online (Sandbox Code Playgroud)

这导致, 删除了本示例中单词和"This is my quitelong string data"之间的空格。我想到解决这个问题的唯一方法是将每个子行的第一个前导空格替换为:quitelong\x20

Key: "\
  This is \
  my quite\
  \x20long st\
  ring data\
  "
Run Code Online (Sandbox Code Playgroud)

由于我选择 YAML 来获得最佳的人类可读格式,我发现这个\x20解决方案有点丑陋。也许有人知道更好的方法?

为了保持人类可读性,我也不想使用!!binary它。

fly*_*lyx 3

\x20您可以简单地转义该行中的第一个非缩进空格,而不是:

Key: "\
  This is \
  my quite\
  \ long st\
  ring data\
  "
Run Code Online (Sandbox Code Playgroud)

这适用于多个空格,您只需要转义第一个空格即可。