ちょうどYAMLとPythonの両方を使い始めています。Pythonでアンカーとエイリアスを含むYAMLを解析しようとしています。
このYAMLでは、特定のノードの値が異なるようにアンカーを上書きします。Pythonで重複したアンカーでYAMLを解析する
私のYAMLの例:私はYAML上記here
スニペットテスト{
"Some Colors": {
"color_primary": "#112233FF",
"color_secondary": "#445566FF"
},
"Element": {
"color": "#112233FF"
},
"Overwrite some colors": {
"color_primary": "#000000FF"
},
"Another element": {
"color": "#000000FF"
}
}
:(JSON中)の予想結果を有する
Some Colors: &some_colors color_primary: &color_primary "#112233FF" color_secondary: &color_secondary "#445566FF" Element: &element color: *color_primary Overwrite some colors: &overwrite_colors color_primary: &color_primary "#000000FF" Another element: &another_element color: *color_primary
私が読んだことからYAML docs;これはバージョン1.1から可能だったはずです(私は思う)が、少なくともYAMLバージョン1.2はそれをサポートするべきです。
しかし、私はYAMLを解析しようとするときはいつでも、(
yaml.load()
付き)PyYAMLとか(ruamel.yaml.load()
付き)ruamel,yaml
パッケージを使用して、私は「重複したアンカー」エラーが発生します。私はここで間違っていますか?そしてこれを修正する方法は?
編集:私は上記の質問に対する解決策を見つけた
ruamel
の所有者の助けを借りて。
ruamel
v0.12.3から上記は正常に機能しますが、ReusedAnchorWarning
が届きます。
これらの警告は、次のスニペットを抑えることができます。これが原因であるクレジットを与えるimport warnings from ruamel.yaml.error import ReusedAnchorWarning warnings.simplefilter("ignore", ReusedAnchorWarning)
。それらのすべては
ruamel
の所有者に行きます。
追加された質問として、私はに上記のYAML(
// <-- Added this
での変化に気付く)変更する場合:Some Colors: &some_colors color_primary: &color_primary "#112233FF" color_secondary: &color_secondary "#445566FF" Element: &element color: *color_primary Overwrite some colors: &overwrite_colors <<: *some_colors // <-- Added this to include 'color_secondary' as well color_primary: &color_primary "#000000FF" Another element: &another_element color: *color_primary
を出力は、次のとおりです。
{ "Some Colors": { "color_primary": "#000000FF", "color_secondary": "#445566FF" }, "Element": { "color": "#112233FF" }, "Overwrite some colors": { "color_primary": "#000000FF", "color_secondary": "#445566FF" }, "Another element": { "color": "#445566FF" // <-- Now the value is 'color_secondary' instead of 'color_primary'? } }
Another element
のcolor
ではなくcolor_secondary
の値を見ているのはなぜ?これを修正する方法はありますか?
サー、歌、賞賛!あなたの答えに述べているのは、真実です。 「_Best_ Online YAML Converter」は、結局のところ最高のものではなかったようです。ありがとう、これは私に多くの頭痛を免れました! –
pyyamlの[現在のバグレポートを開いた](https://bitbucket.org/xi/pyyaml/issues/66/duplicate-anchors-result-in-exception)私は楽観主義者だと思う。 – tedder42