2016-04-21 50 views
2

我有一個example.json文件。如何將數組追加到現有的json數組並寫入節點js中的文件

{ 
    "tc" : 
    [ 
    {"name" : "tc_001"}, 
    {"name" : "tc_002"}, 
    {"name" : "tc_003"}, 
    {"name" : "tc_004"}, 
    {"name" : "tc_005"} 
    ] 
} 

在這裏,我需要添加另一個數組到tc[0]th索引。在Node JS我嘗試這樣做:

var fs = require('fs'); 

var obj = JSON.parse(fs.readFileSync('example.json', 'utf8')); 
var arr1 = {bc :[{name:'bc_001'}]} 
var arr2 = {bc :[{name:'bc_002'}]} 
obj.tc[0] = arr1; 
obj.tc[0] = arr2; 

但打印該obj時,obj.tc[0]已取代的arr2值。 最後的結果我想實現的是:

{ 
    "tc" : 
    [ 
    { 
     "name" : "tc_001" 
     "bc" : 
     [ 
      {"name" = "bc_001"}, 
      {"name" = "bc_002"} 
     ] 
    }, 
    {"name" : "tc_002"}, 
    {"name" : "tc_003"}, 
    {"name" : "tc_004"}, 
    {"name" : "tc_005"} 
    ] 
} 

我也想寫這回同一json文件。 我想在這裏實現一個文件,其中包含具有唯一名稱的tc。此外,一個tc可以具有多個bc,並且bc具有名稱屬性。

我也接受關於更好的json結構的建議來支持這個概念。

+0

你是什麼更好的對象結構是什麼意思?這取決於目的。 –

回答

3

要添加到對象的多個項目的解決方案。

它使用一個對象o新值應該去和值對象v與鍵和項目分配。

它內部遍歷鍵並構建一個新的數組(如果尚未存在的話)。然後將所有值都推送到數組。

function add(o, v) { 
 
    Object.keys(v).forEach(k => { 
 
     o[k] = o[k] || []; 
 
     v[k].forEach(a => o[k].push(a)); 
 
    }); 
 
} 
 

 
var obj = { "tc": [{ "name": "tc_001" }, { "name": "tc_002" }, { "name": "tc_003" }, { "name": "tc_004" }, { "name": "tc_005" }] }; 
 

 
add(obj.tc[0], { bc: [{ name: 'bc_001' }] }); 
 
add(obj.tc[0], { bc: [{ name: 'bc_002' }] }); 
 
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');

+0

對不起,我編輯了這個問題。我想給'tc'添加兩個'bc'。你能否請編輯答案 – CoderS

+0

@Srinesh,請參閱編輯。 –

+0

它的工作,但很難理解'功能添加(o,v)'。如果可能的話,你可以簡化一下嗎? – CoderS

相關問題