Yaml 将文本分隔符保留在!!str";“一些文本”;或str';一些文本';

Yaml 将文本分隔符保留在!!str";“一些文本”;或str';一些文本';,yaml,Yaml,我有一些数据要用来生成SQL,因此使用哪些文本分隔符很重要(单引号分隔字符串文字,但双引号分隔标识符,至少在Oracle db中是这样) 对于load procedure generator,我使用了这个 someKey: !!str 'Some SQL text' 并期望someKey包含包含单引号的整个字符串:“somesql文本” 但是,js yaml.safeLoad()将数据解释为一些SQL文本,这不是我想要的 解决方法很简单,我可以将文字添加到其他引号中: someKey: "'S

我有一些数据要用来生成SQL,因此使用哪些文本分隔符很重要(单引号分隔字符串文字,但双引号分隔标识符,至少在Oracle db中是这样)

对于load procedure generator,我使用了这个

someKey: !!str 'Some SQL text'
并期望someKey包含包含单引号的整个字符串:
“somesql文本”

但是,js yaml.safeLoad()将数据解释为
一些SQL文本
,这不是我想要的

解决方法很简单,我可以将文字添加到其他引号中:

someKey: "'Some SQL text'"
这给出了预期的结果。但是,我不太清楚为什么在这种情况下我们需要YAML中的!!str标记,如果它实际上什么都不做(它只对显式解释数字文本有用,true、false和null),并且它实际上几乎与在文本周围加双引号相同

我更愿意将此发布到一些YAML规范相关论坛,但似乎没有


除了标准的解决方法外,是否有任何技巧可以实现我最初想要的功能,即将对象键后的任何内容解释为字符串(+删除任何初始和尾随空格)不处理双引号?

在YAML标记
!!中,str
是一个表示字符串标量的预设值。如果指定,则即使没有该标记(或没有引号)的事物也不会被视为字符串标量,如
123
True
null

某些字符串标量需要引号,例如,如果它们以引号或双引号开头,如果特殊字符需要反斜杠空格,或者如果字符串中存在
(冒号、空格)(这可能会使解析器混淆,无法将字符串标量表示为键值对

然而,将
!!str
放在某物之前并不能使它被引用(这应该是显而易见的,因为它没有定义什么样的引用和单引用标量与双引用标量有着截然不同的规则)

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

someKey: |-
   'Some SQL text'

文字块样式标量内的引号(单引号或双引号)在标量的开始处被解释为是偶数。
-
确保在YAML标记
中的最后一个

之后不会有额外的换行符。!!str
是一个表示字符串标量的预分隔符。如果您指定,则即使没有该标记(或没有引号)的东西也不会出现不会被视为字符串标量,如
123
True
null

某些字符串标量需要引号,例如,如果它们以引号或双引号开头,如果特殊字符需要反斜杠空格,或者如果字符串中存在
(冒号、空格)(这可能会使解析器混淆,无法将字符串标量表示为键值对

然而,将
!!str
放在某物之前并不能使它被引用(这应该是显而易见的,因为它没有定义什么样的引用和单引用标量与双引用标量有着截然不同的规则)

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

someKey: |-
   'Some SQL text'

在文字块样式标量中,引号(单引号或双引号)被解释为甚至在标量的开头。
-
确保在最后一个
'之后没有额外的换行符。

我需要它的原因:我需要它的原因:-对象键是输出列的名称(别名)-该值表示要分配给该列的表达式。现在,像这样的构造:column:'FULL'意味着我想将字符串常量
FULL
分配给column
column
,而column:FULL应该解释为“将标识符FULL的值分配给column
column
"-其中FULL可能是列、变量、函数等。不幸的是,YAML规范将这两者解释为FULL,这在某种意义上是信息丢失,在这种情况下是一个重要的信息丢失。有一个YAML邮件列表,请注意,这不是一个论坛,而是一个问答网站。谁说你需要
!!str
?你读过规范了吗或者只是一些次要的YAML如何实现这一点不是真的?如果使用自定义标记,肯定会在Python中工作,因为它允许您在其表示为字符串时执行特殊操作。例如,对象创建将标量字符串作为值(没有任何未加修饰的前导/尾随引号)当您将其作为字符串传递给SQL时,您可以添加引号。这在JavaScript中也是可行的(我从您的文本中的
js yaml
中得到了一个提示),我只是不熟悉它的解析器。我需要它的原因:我需要它的原因:-对象键是输出列的名称(别名)-该值表示要分配给该列的表达式。现在,像这样的构造:column:'FULL'意味着我想将字符串常量
FULL
分配给column
column
,而column:FULL应该解释为“将标识符FULL的值分配给column
column
”-其中FULL可能是列、变量、函数等。不幸的是,YAML规范将这两者解释为FULL,这在某种意义上是信息丢失,在这种情况下是一个重要的信息丢失。有一个YAML邮件列表,请注意,这不是一个论坛,而是一个问答网站。谁说你需要
!!str
?你读过规范了吗或者只是一些次要的YAML如何实现这一点不是真的?如果使用自定义标记,肯定会在Python中工作,因为它允许您在其表示为字符串时执行特殊操作。例如,对象创建将标量字符串作为值(没有任何未加修饰的前导/尾随引号)