2013-12-12 19 views
-1

Я не знаю, является ли заголовок правильным для того, что я хочу сделать.создать объект JSON из другого объекта JSON

У меня есть следующий массив объектов

array([0]: {category: "10", 
       question: "101"}, 
      [1]: {category: "10", 
       question: "102"}, 
      [2]: {category: "20", 
       question: "201"} 
    ); 

И я хочу, чтобы сгруппировать все элементы в чем-то вроде этого:

array([0]: {category: "10", {question: "101", 
           question: "102"}}, 
       category: "20", {question: "201"}}); 

Я не знаю, если это возможно, или, если есть еще один лучший способ решить эту проблему (возможно, с двумерным массивом?), но любая помощь будет очень оценена.

Спасибо!

Извините за недостаток информации, вот как я создаю мой массив объектов:

var arr_sections = []; 
    var arr_questions = []; 
var jsonObj = []; 
$('.ui-sortable-nostyle').each(function(){ 
    arr_sections.push($(this).attr("sec_id"));    
}); 

// create json object with pairs category - question 
$(".sortable2").each(function(i){       
    $(this).children().each(function(j){  
     var cat = arr_sections[i]; 
     jsonObj.push({ 
      category: arr_sections[i], 
      question: $(this).attr("ques_id") 
     });  
    }); 
}); 

И получил массив объектов со следующей структурой:

[Object, Object, Object, Object, Object] 
    0: Object 
     category: "1052" 
     question: "3701" 
     __proto__: Object 
    1: Object 
     category: "1053" 
     question: "3702" 
     __proto__: Object 
    2: Object 
     category: "483" 
     question: "1550" 
     __proto__: Object 
    3: Object 
     category: "483" 
     question: "1548" 
     __proto__: Object 
    4: Object 
     category: "483" 
     question: "1549" 
     __proto__: Object 
    length: 5 

Пробовал создать мой новый массив:

for(var i = 0; i < jsonObj.length; i++){ 
     temp[jsonObj[i].category] = jsonObj[i].question; 
} 

Но я не получаю все значения:

[483: "1549", 1052: "3701", 1053: "3702"] 
+1

Там нет такого понятия, как объект JSON, есть JavaScript объекты и строки в формате JSON, и они могут выглядеть одинаково, но они не являются – adeneo

+0

И что вы показываете нам, нет синтаксиса JavaScript или JSON. – Quentin

+0

Благодарим за разъяснение adeneo. Идея заключается в объединении массива объектов с общей структурой в один объект или строку JSON, группирующую эти разные значения для каждого свойства. – mIwE

ответ

3

У вас есть:

var arr = [ 
    {category: "10", question: "101"}, 
    {category: "10", question: "102"}, 
    {category: "20", question: "201"} 
]; 

Вы хотите (я полагаю):

var arrRequired = [ 
    {category: "10", question : ["101", "102"] }, 
    {category: "20", question : ["201"] } 
]; 

Я дам вам:

var obj = { 
    "10" : ["101", "102"], 
    "20" : ["201"] 
}; 

Чтобы преобразовать то, что у вас есть на то, что я даст вам, вы можете сделать:

var result = {}; 
arr.forEach(function(item) { 
    if (!result[item.category]) 
    result[item.category] = [item.question]; 
    else 
    result[item.category].push(item.question); 
}); 

Чтобы получить то, что вы хотите от того, что я дал вам, вы можете сделать:

var arrRequired = []; 
for (var category in result){ 
    arrRequired.push({ 'category' : category, 'question' : result[category] }); 
} 

Если это не то, что вы хотите, то, возможно, вы должны объяснить это лучше, используя правильный синтаксис.

+0

Ну, это очень объясняет, на мой взгляд, – FreshPro

+0

Большое вам спасибо, это именно то, что я искал :) – mIwE

-1

Вот ответ на то, что вы спросили:

var object1 = JSON.parse(jsonString1); 
// Do something to object1 here. 
var jsonString2 = JSON.stringify(object1); 
Смежные вопросы