如何使用缩进折叠多行yaml字符串

问题描述 投票:1回答:2

(在提供答案之前,请注意我已经尝试过>>-都没有成功)。

我试图想象安全变量。我希望将格式良好的SQL(伪sql)查询折叠成行而不使用换行符。

我的问题是,如果字符串有缩进,qazxsw poi运算符不起作用...

>

生产:

--- - hosts: localhost gather_facts: no tasks: - debug: var=foo vars: foo: > select foo from bar where ok join left select baz from boo

而且我不想在文本中间看到ok: [localhost] => { "foo": "select foo\n from bar\n where ok\njoin left\n select baz\n from boo\n \n" } 。这可以通过YAML权力单独解决吗?

ansible yaml
2个回答
1
投票

是的,这是YAML最奇怪的“特色”。使用普通的多行标量代替:

\n

2
投票

根据--- - hosts: localhost gather_facts: no tasks: - debug: var=foo vars: foo: select foo from bar where ok join left select baz from boo ,您从YAML加载的数据中获取换行符的原因是:

折叠允许在单个空格字符分隔两个非空格字符的任何地方打破长行。

而且由于在YAML specification之前有空格,因此之前的换行线不能处于“折叠”并且是一个很难的换行符。

要单独使用YAML“解决”这个问题,您可以尝试使用from bar作为已经指示的@flyx,但请注意,对于不适用于折叠标量的普通标量有一些限制。这些可能不适用于您的示例,但可能在您拥有真正的SQL语法时执行。

您可以做的另一件事是折叠后不缩进:

plain style scalars

这并没有真正使事情更具可读性,但没有普通风格标量所具有的限制。

最好的解决方案是在保持最大可读性的同时添加标记并使用文字样式标量

foo: >
  select foo
  from bar
  where ok
  join left
  select baz
  from boo

并为加载标签foo: !flatten | select foo from bar where ok join left select baz from boo 加载对象,在加载过程中适当地展开以下行(即用一个换行符替换换行符后跟空格)。

尽管使用标签是IMO最好的解决方案,但是将“单独使用YAML”这一术语延伸到超出合理范围的范围。

© www.soinside.com 2019 - 2024. All rights reserved.