2016-12-11 47 views
0

對象替換字符串我有3個JSON文件:與其他JSON文件

  1. sources.json
  2. destination_level1.json
  3. destination_level0.json(最後文件)

我想通過替換匹配的字符串「合併」所有這些文件,例如

destination_level0 - > destination_level1 - > sources

用詞語:「檢查destination_level0中的鍵例如「部件1」,去destination_level1和查找匹配的對象,並在destination_level0與對象替換部件1「也是一樣從destination_level1消息人士透露

來源可能是這樣的:。

{"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}} 

destination_level_1像這樣的:

{"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]} 

和destination_level_0這樣的:

{"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]} 

最後的結果應該是這樣的:

{"FinalA": [[["A","B"],{"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]},... 

我已經嘗試了一些lodash &底線,但卡住了。

任何想法?

+0

element2從哪裏來? finalB從哪裏來?關係不清楚! –

+0

element2在destination_level0.json中手動定義。 finalB一樣。 element2應該替換爲destination_level_1中element2的對象。由於這是我們將要使用的最終「關鍵」,因此finalB不需要被替換。我希望澄清它? – Vinzent

回答

0

剛剛在純JavaScript

var sources = {"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}}; 
 
    var destination_level_0 = {"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]}; 
 
    var destination_level_1 = {"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]}; 
 
    
 
    var final = {}; 
 
    for(var key in destination_level_0){ 
 
     var preFinal = []; 
 
     var elems = destination_level_0[key]; 
 
     for(var i in elems){ 
 
      var elem = elems[i]; 
 
      var names = destination_level_1[elem]; 
 
      for(var j in names){ 
 
       var name = names[j]; 
 
       var finalItem = sources[name]; 
 
       preFinal.push(finalItem); 
 
      } 
 
     } 
 
     final[key] = preFinal; 
 
    } 
 
    
 
    console.log(final); 
 
    console.log(JSON.stringify(final));

+0

非常感謝你......我得到了它的工作 - 主要是:只有一件事: 我怎麼能夠嵌套在上面的「陣列項目」內的最低級別? 例如對不,看起來像這樣: FinalA - > john: {「FinalA」:[[「A」,「B」],{「abc」:[「yxc」,「xcv」,「cvb」],「bcd」:[「poi」 ,「iuz」,「uzt」]},[「A」,「B」],[「A」,「B」],[「abc」,「cde」],... 我確實需要元素來自嵌套在一個項目數組項目下的「來源」,例如FinalY - > Element1 - > john {「FinalA」:[[[「A」,「B」],{「abc」:[「yxc」,「xcv」,「cvb」],「bcd」:[ poi「,」iuz「,」uzt「]},[」A「,」B「],[」A「,」B「]],[」abc「,」cde「], 任何想法? – Vinzent

+0

對不起,我沒有得到你的問題。你可以用你想要的輸出的例子來編輯你上面發佈的問題嗎? – Karlen

+0

我想我知道了 - 非常感謝您的幫助! – Vinzent

0

地圖從0級=> 1級=>的項目級別2使用Array#.map內部Array#map(或lodash的_.map()):

var level0 = {"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]}; 
 
var level1 = {"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]}; 
 
var level2 = {"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}} 
 
; 
 

 
var result = Object.keys(level0).reduce(function(r, key) { 
 
    r[key] = level0[key].map(function(element) { 
 
    return level1[element].map(function(item) { 
 
     return level2[item]; 
 
    }); 
 
    }) 
 
    
 
    return r; 
 
}, Object.create(null)); 
 

 
console.log(JSON.stringify(result));