2017-02-14 12 views
0

配列から複数のJSONファイルを作成したいとします。配列からのJsonファイルの動的作成

アレイ

[{ 
    "Reference": "Registration", 
    "langkey": "REG_LBL", 
    "English": "Company Registration", 
    "Japanese": "会社登録" 
}, { 
    "Reference": "Registration", 
    "langkey": "INFO_LBL", 
    "English": "Company Information", 
    "Japanese": "会社情報" 
}] 

私は2つのJSONファイルを作成する必要があるが、アレイ上から(それはダイナミックになります)、英語と日本語の名前を付けます。

所望の出力

English.json

{ 
'INFO_LBL' : 'Company Information', 
'REG_LBL':'Company Registration' 
} 

Japanese.json

{ 
'INFO_LBL' : '会社情報', 
'REG_LBL':'会社情報' 
} 

コード

for (var i = 0; i < data.length; i++) { 
    var obj = data[i]; 
    for (var key in obj) { 
     if (key !=='Reference' && key !== 'langkey') { 
      //{'REG_LBL':'Company Registration'} 

      objects[obj['langkey']] = obj[key]; 
      fs.writeFileSync('lang/' + langkey + '.json', JSON.stringify(objects, null, 2), { encoding: 'utf8' }, function (err) { 
       if (err) 
       { throw err; } 
       console.log("completed") 

      }); 

     } 
    } 
} 

私は2つのJSONファイルを作成することはできますが、コンテンツは別のファイルによって上書きされます。これを解決するにはどうすればよいですか?

+0

2つのJSONファイルを作成できます。配列に言語ごとに複数のオブジェクトがある場合は、言語ごとにオブジェクトの配列を使用し、これをjsonファイルに書き込む必要があります。 – DomeTune

+0

'langKey'はどこで定義されていますか? – DomeTune

+0

jsonファイルの作成方法を含めることができます – Merigold

答えて

1

あなたの配列には2つの項目があり、2つの言語がありますので、4つのjsonファイルが必要ですか? 2 INFO_LBL(英語&ジャパニーズ)と2 REG_LBL(英語&ジャパニシ)?または、2番目の項目INFO_LBL(日本語& japanesh)に2つのjsonファイルが必要ですか?

更新:怒鳴るあなたのソリューションは、データが上書きなっている場合、それが原因でwriteFileSyncであろう

for (var i = 0; i < data.length; i++) { 
    var obj = data[i]; 
    for (var key in obj) { 
     if (key !== 'Reference' && key !== 'langkey') { 
      var newObject = {}; 
      var path = 'lang/' + key + '.json'; 
      if (fs.existsSync(path)) { 
       var newObject = JSON.parse(fs.readFileSync(path, 'utf8')); 
      } 
      newObject[obj.langkey] = obj[key]; 
      fs.writeFileSync(path, JSON.stringify(newObject, null, 2), { encoding: 'utf8' }); 
     } 
    } 
} 
+1

私は自分の答えを更新しました。変更はありませんが、既に保存されている場合は、jsonファイルにすでに格納されているオブジェクトを取得するだけです。 PS:すべてのlang/* .jsonファイルを削除してから – Fetrarij

+0

を削除してください。今は魅力のような仕事。たくさんありがとう – Gopesh

0

これは動作します。私はウィンドウ['newVariable']を使って別々のオブジェクトを作成しました。

var myArray = 

[{ 
    "Reference": "Registration", 
    "langkey": "REG_LBL", 
    "English": "Company Registration", 
    "Japanese": "会社登録" 
}, { 
    "Reference": "Registration", 
    "langkey": "INFO_LBL", 
    "English": "Company Information", 
    "Japanese": "会社情報" 
}]; 

for(i=0; i<myArray.length; i++){ 
    window['myJSON' + i] = myArray[i]; 
} 
console.log(myJSON0, myJSON1); 

ここでは、2つの別々のオブジェクト

enter image description here

は、あなたがしなければならないすべては、JSON文字列化にあり、私が得たものです。

0

です。 appendFileSyncまたはwriteFileSyncのフラグを使用してください。

2
var finalObject = {};//create new object 

data.forEach(v => { 
    var langkey = v.langkey; 
    Object.keys(v).forEach(val => { 
     if (val != 'langkey' && val != 'Reference') { 
      if (finalObject[val]) {//find if language object is already created.If already created insert in it else create new 
       let data = {}; 
       data[langkey] = v[val] 
       finalObject[val] = Object.assign(finalObject[val], data) 
      } else { 
       finalObject[val] = {}; 
       finalObject[val][langkey] = v[val]; 
      } 


     } 
    }) 
}) 
Object.keys(finalObject).forEach(key => { 
    fs.writeFileSync(path.join(__dirname, `/lang/${key}.json`), JSON.stringify(finalObject[key], null, 2), (err) => { 
     if (err) 
     { throw err; } 
     console.log('completed'); 
    }); 
}) 
関連する問題