2016-12-11 7 views
0

У меня есть 3 JSon файлы:заменить строки с объектом других JSon файлов

  1. sources.json
  2. destination_level1.json
  3. destination_level0.json (конечный файл)

Я хочу «объединить» все файлы тезисов, заменив соответствующие строки, например

destination_level0 -> destination_level1 -> sources

в слова: «Проверьте ключи в destination_level0, например. «Element1», перейдите к destination_level1 и искать соответствующий объект и заменить element1 в destination_level0 с этим объектом «То же самое происходит из 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

Откуда взялся элемент2? Откуда берутся finalB? Отношения непонятны! –

+0

Элемент2 определяется вручную в destination_level0.json. То же самое для finalB. Элемент2 должен быть заменен объектом для элемента2 из destination_level_1. 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": [" «А», «В»], [«ab», «cde»], Любая идея? – Vinzent

+0

Извините, у меня не возник вопрос. Можете ли вы отредактировать свой размещенный вопрос выше с примером желаемого результата? – Karlen

+0

Я думаю, что у меня это получилось - большое спасибо за вашу помощь! – Vinzent

0

Карта элемент из level0 => level1 => level2 с использованием 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));