2016-04-08 3 views
-1

У меня есть 2 формата json, а именно jsonA и jsonB, в которых я хотел бы объединиться в jsonC, как следует. Цените, если кто-нибудь скажет мне, как это сделать.Объединение коллекций в массив json

jsonA

{ 
    "text1": "Hello", 
    "text2": "Hi", 
    "text3": "There" 
} 

jsonB

[ 
    { 
     "id": "text1", 
     "category": "Big" 
    }, 
    { 
     "id": "text2", 
     "category": "Medium" 
    }, 
    { 
     "id": "text3", 
     "category": "Small" 
    }, 
] 

Final

[ 
    { 
     "id": "text1", 
     "category": "Big", 
     "message": "Hello" 
    }, 
    { 
     "id": "text2", 
     "category": "Medium", 
     "message": "Hi" 
    }, 
    { 
     "id": "text3", 
     "category": "Small", 
     "message": "There" 
    } 
] 
+1

JSON является * текстовое обозначение * для обмена данными. Если вы имеете дело с исходным кодом JavaScript и не имеете дело с * строкой *, вы не имеете дело с JSON. У вас есть объект и массив. –

+1

Возьмите удар, и если у вас возникнут проблемы, задайте конкретный вопрос о проблеме, с которой вы столкнулись. –

+1

- это то, что '' id ":" text1 "' всегда одно и то же? –

ответ

1

Решение для нового массива.

В основном он выполняет итерацию массива и создает новый объект для каждого найденного объекта. Он добавляет новое свойство message с требуемой формой контента objectA.

var objectA = { "text1": "Hello", "text2": "Hi", "text3": "There" }, 
 
    objectB = [{ "id": "text1", "category": "Big" }, { "id": "text2", "category": "Medium" }, { "id": "text3", "category": "Small" }], 
 
    objectC = objectB.map(function (a) { 
 
     return { 
 
      id: a.id, 
 
      category: a.category, 
 
      message: objectA[a.id] 
 
     }; 
 
    }); 
 

 
document.write('<pre>' + JSON.stringify(objectC, 0, 4) + '</pre>');

Soulution для мутировавший массива.

Это решение принимает массив и добавляет в цикл новое свойство со значением от objectA.

var objectA = { "text1": "Hello", "text2": "Hi", "text3": "There" }, 
 
    objectB = [{ "id": "text1", "category": "Big" }, { "id": "text2", "category": "Medium" }, { "id": "text3", "category": "Small" }]; 
 

 
objectB.forEach(function (a) { 
 
    a.message = objectA[a.id]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(objectB, 0, 4) + '</pre>');

-1

Во-первых, Вы должны пройти 2-й массив JSON. Затем перейдите 1-й json и сравните для индексации. Если индексирование соответствует, добавьте новый атрибут во второй json.

Вот полный пример:

вар jsonA = '{ "text1": "Здравствуйте", "text2": "Привет", "text3": "Там"}';

var jsonB = '[{"id": "text1", "category": "Big"}, {"id": "text1", "category": "Medium"}, {"id": «text1», «category»: «Small»}] ';

jsonA = JSON.parse(jsonA); 
jsonB = JSON.parse(jsonB); 

for(var i=0;i<jsonB.length;i++){ 
    for(var j in jsonA){    
     if(j == ("text"+(i+1))){ 
      jsonB[i].message = jsonA[j];     
     }    
    } 
} 

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

Выход: [{ "ID": "text1", "категория": "Большой", "сообщение": "Hello"}, { "ID": "text1", "категория":» Medium "," message ":" Hi "}, {" id ":" text1 "," category ":" Small "," message ":" There "}]

Смежные вопросы