2016-04-29 2 views
1

は私がSnakeYAMLと、次のドキュメントを読み込むとき:SnakeYAML:オブジェクトのアンカー名を取得できますか?

unit: 
    &kg 
    name: Kilogram 

が、それは次の内容のマップを返します。

アンカーとの参照がSnakeYAMLで素晴らしい作品が、取得することも可能である

{unit={name=Kilogram}} 
文書から名前をアンカーしますか?

コードスニペット:

String text = "unit:\n &kg\n name: Kilogram\n"; 
System.out.println(new Yaml().load(text)); // -> {unit={name=Kilogram}} 

答えて

1

SnakeYAMLはもともとPyYAMLとに基づいて、そのコードをベースに、それは解析時に作成したオブジェクトにアンカー名からマッピングを維持することにより、アンカーを解決します。 パーザは後で参照に出会うと、アンカー内の名前を検索し、アンカー用に作成されたオブジェクトへのリンクを作成することを知っています。

PyYAMLでは、このマッピングはComposerオブジェクトのコードにあり、属性は適切にanchorsと呼ばれます。 SnakeYamlこれはstill called the sameです。

あなたがしなければならないことは、そのマッピングを乗り越えて、値をあなたのオブジェクトへの参照と比較することです。一致した場合、値に属するキーはほぼ確実にアンカー名でした。私は他のもののコメントやアンカーの間で保存さround_tripモードを実装しYAML 1.2 PyYAMLとの更新である私のpythonパッケージruamel.yaml、で


。構築中、私はコメントやアンカー情報を、作成するオブジェクトにぶら下げます。これはPythonでは簡単ですが、AFAIKはJavaで簡単ではありません。

関連する問題