2016-12-15 51 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' 

在文字塊風格的標量中,引號(單或雙)在標量的開始處被解釋爲是。該-確保你後的最終'

相關問題