2017-04-05 13 views
2

私のプロジェクトにはedit.ymlというファイルがあります。私はnode.js次のコードを使用してjsonにこれを変換する際にnodejsのyamlファイルをjsonに変換する

color : 
    white : &color-white "#FFFFFF" 
    black : &color-black "#262626" 
neutral : 
    20 : &color-neutral-20 "#222222" 
    90 : &color-neutral-90 "#EEEEEE" 

だから、&color-whiteを取得していない午前:ここyamlファイルです。それは変換中に特殊文字を省略したためかもしれません。しかし私はそれらを私のjsonに必要とします。

node.jsコード:YAMLモジュールが正常に動作している

var fs = require('fs'); 
const yaml1 = require('js-yaml'); 
const YAML = require('yamljs'); 
module.exports = { 
    save : function(item) { 
    fs.writeFile('edit1.yml',YAML.stringify(item,4),function(err,item){ 
     if(err) { 
     } 
    }); 
    }, 
    load : function() { 
    var data = yaml1.safeLoad(fs.readFileSync('edit0.yml','utf8')); 
    var indentedJson = JSON.stringify(data, null, 4); 
    return indentedJson; 
    } 
}; 

答えて

2

、問題はあなたのYAMLです。それは有効なファイルですが、おそらくあなたが望むものではありません。

私はYAMLの仕様の一部を引用してみましょう:

繰り返しノード(オブジェクト)最初(アンパサンドと マーク - 「&」)をアンカーで識別され、その後、エイリアス(で参照されていますその後、アスタリスク - 「*」) )。あなたの例では

color-whiteyamlファイルの残りの部分に使用することができ、そのノードの別名です。以下のようなJSONを返します

color : 
    white : "&color-white \"#FFFFFF\"" 
    black : "&color-black \"#262626\"" 
neutral : 
    20 : "&color-neutral-20 \"#222222\"" 
    90 : "&color-neutral-90 \"#EEEEEE\"" 

{ 
    "color": { 
     "white": "&color-white \"#FFFFFF\"", 
     "black": "&color-black \"#262626\"" 
    }, 
    "neutral": { 
     "20": "&color-neutral-20 \"#222222\"", 
     "90": "&color-neutral-90 \"#EEEEEE\"" 
    } 
} 
を使用すると、JSONファイルであることをアンパサンド( &)記号の後のテキストが必要な場合は

は、次のようなyamlファイルを使用することができます

json.color.white&color-white "#FFFFFF"

+0

ありがとうございました。私たちがそうするなら、それは有効なヤルであろうか? –

+0

はい、確かに、値はエスケープされた引用符を含む文字列です。すべてがOKです – greuze

+0

シンプルで読みやすいオプションはバックスラッシュで最初の '&'文字をエスケープすることです: 'white:\&color-white" #FFFFFF " ' –

0

です。ファイル内のYAMLはを含む文書です。

このようなアンカーは、通常、直接または間接の自己参照構造をダンプできるように使用されます。あなたの例では、これらのアンカーを参照するエイリアスは含まれていません。

YAML仕様の重要な部分は、上記にリンクされているセクション内にある:

そうでない場合は、アンカー名はシリアル化の詳細であり、作曲一度破棄され

を完了しているので、名前を固定すべきロード後に利用可能であることに依存せず、情報を中継するのに使用されない。 YAML文書のコメントと同じです。

IMOアンカーの一部であるcolor-whiteという文字列が必要ではないと思われる場合&color-whiteキーの文字列をcolorから で作成し、colorに関連付けられた値のマッピングのキーを操作する必要があります。 whiteblackとなり、これらのキーの組み合わせから簡単に文字列color-whitecolor-blackを作成できます(関連する色の値を見つけることができます)。

あなたが完全に制御できないかもしれないYAML文書を変更する必要はなく、文字列の特殊な解析を行う必要はありません。"&color-neutral-20 \"#222222\"" @greuzeはあなたがすべきことを示唆しています。

関連する問題