2016-12-15 52 views
-1

我有一些数据用于生成SQL,因此使用文本分隔符是很重要的(单引号'分隔字符串字面量,但是双引号“界定标识符,至少在Oracle数据库)在!! str“some text”或!! str'一些文本'后保留文本分隔符

对于负载过程产生器我用这个

someKey: !!str 'Some SQL text' 

,并预计someKey将包含整个字符串包括单引号:。'Some SQL text'

但是,js-yaml.safeLoad()interp数据为Some SQL text,这不是我想要的。

解决方法很简单,我可以把文字变成另外报价:

someKey: "'Some SQL text'" 

这给预期的结果。然而,我不确定为什么在这种情况下,我们需要在YAML中使用!! str标记,如果它几乎没有任何作用(它只对显式解释数字文字,真,假和空有用),它实际上几乎与在文本周围放置双引号。

我宁愿发表这个到一些YAML规范相关的论坛,但它似乎没有。

除了标准的解决方法,是否有任何技巧会做我最初想要的,即解释对象键后的任何内容作为字符串(+修剪任何初始和尾随空格)而不涉及双引号?

+0

我之所以需要这个没有得到额外的换行符: –

+0

之所以我需要这样的: - 对象键是一个输出列的名称(别名) - 该值表示要分配给此列的表达式。 现在,建设这样的: 栏:“FULL” 意味着我要ASIGN字符串常量'FULL'到列'column'而 柱:FULL 应该被解释为“指定标识FULL列'的价值列'“ - 其中FULL可能是列,变量,函数等。 不幸的是,YAML规范将这两个解释为** FULL **,这在某种意义上说是信息丢失,在这种情况下是重要信息丢失。 –

+1

有一个yaml邮件列表,请注意[so]不是论坛,而是问答网站。 – Anthon

回答

2

在YAML标记!!str是一个predifened表示字符串标量。如果指定了那个,那么即使没有该标签(或没有引号)的东西也不会被视为字符串标量,如123,Truenull

某些字符串标量需要引号,例如如果它们以引号或双引号开头,如果特殊字符需要反斜杠,或者如果字符串中有一个:(冒号,空格)(这可能会混淆解析器以解释字符串标量作为键值对。)

然而事情之前把!!str不会使它引用(这应该是显而易见的,因为它没有定义什么样的报价和单引号标量的具有双引号的标量完全不同的规则)。

你的解决方法是不是解决方法,这只是YAML中的一种方法,您可以指定以单引号开头和结尾的字符串标量。另一种方法是:

someKey: |- 
    'Some SQL text' 

在文字块风格的标量中,引号(单或双)在标量的开始处被解释为是。该-确保你后的最终'

相关问题