2013-09-25 84 views
1

今天我在yaml-cpp庫中發現了下面的奇怪行爲。Yaml-cpp解析器沒有正確處理key:value片段

繼YAML片段:

- { a: b } 

被正確地解析爲關鍵:與關鍵= a和值= b值爲元件。但是,當我更新片段:

- { a:b } 

片段評估爲標量值「a:b」。

這是正確的行爲?有沒有簡單的方法如何強制解析器評估這個片段爲key:value?

謝謝!

回答

0

這是正確的行爲。從YAML spec

通常情況下,YAML堅持「:」映射值指標與空白值分開。這種限制的一個好處是,只要沒有空白,就可以在純標量內使用「:」字符。這允許未加引號的URL和時間戳。這也是一個潛在的混淆源,因爲「a:1」是一個簡單的標量,而不是一個關鍵:值對。

...

爲了確保兼容性JSON,如果流映射內的一個關鍵是類JSON YAML允許鄰近於待指定的以下值「:」。這不會造成歧義,因爲所有類似JSON的密鑰都被指示器包圍。

例如,你可以寫:

- { "a":b } 

然而,當他們指出,這不是很可讀;堅持在冒號後放置空格。