2012-05-07 45 views
5

(ngữ cảnh) Tôi có thông tin từ một loạt các phần tử mà tôi đang thu thập vào một đối tượng JSON sau đó được chuyển xuống bộ điều khiển MVC3, nơi nó được deserialized vào một đối tượng.Tạo một đối tượng JSON lồng nhau động

Có 'mục' và 'cài đặt mục'. Hiện tại, tôi có cả mục và mục cài đặt tất cả trong đối tượng JSON phẳng. Lý tưởng nhất là tôi muốn có các thiết lập mục được lồng trong mỗi mục. Mã của tôi hiện tại trông giống như sau:

var editeditems=[]; 
... 

     $("#SaveChanges").click(function() { 

      //this works and retrieves all of the item IDs 
      $(".portlet").each(function() { 

       var itemname = $(this).data("itemname"); 
     editeditems.push(
         { 
          "itemname": itemname 
         }); 

    itemname = $(this).data("itemname"); 

     $(".settingInput").each(function() { 

      editeditems.push(
       { 
       "settingkey":$(this).attr("name"), 
       "settingvalue":$(this).attr("value") 
       }); 


       }); 


}); 

Dưới $ (". SettingInput") .nỗi chức năng là nơi cài đặt được thêm vào. Tôi đã thử cú pháp như 'editedItems.settings.push ..' nhưng nó trả về với lỗi cú pháp.

Mọi trợ giúp sẽ được đánh giá cao!

Trả lời

12
var editeditems = []; 
... 

$('#SaveChanges').click(function() { 
    $('.portlet').each(function() { 
     var settings = []; 
     $('.settingInput').each(function() { 
      settings.push({ 
       settingkey: $(this).attr('name'), 
       settingvalue: $(this).attr('value') 
      }); 
     }); 

     editeditems.push({ 
      itemname: $(this).data('itemname'), 
      settings: settings 
     }); 
    }); 

    ... 
}); 

sẽ tạo ra mẫu:

var editeditems = 
[ 
    { 
     "itemname": "item1", 
     "settings": [ 
      { 
       "settingkey": "key1", 
       "settingvalue": "value1" 
      }, 
      { 
       "settingkey": "key2", 
       "settingvalue": "value2" 
      } 
     ] 
    }, 
    { 
     "itemname": "item2", 
     "settings": [ 
      { 
       "settingkey": "key1", 
       "settingvalue": "value3" 
      }, 
      { 
       "settingkey": "key2", 
       "settingvalue": "value4" 
      } 
     ] 
    } 
]; 
+0

Điều này làm việc tuyệt vời! Cảm ơn! – Scottingham

3
var ei = {'settings': [3]}; 
ei.settings.push(4); 
console.log(ei); 
// This will output an object with property settings and value an array with values (3 and 4) 
0

Chỉ cần bạn cần phải tạo phẳng mảng dữ liệu json như

[{"itemname": "item1","settingkey": "key1","settingvalue": "value1"}, 
{"itemname": "item2","settingkey": "key2","settingvalue": "value2"},]; 

Thần chỉ xử lý như thế này

var keys = Object.keys(dataMap); 

var json = []; 
for (var key in keys) { 
     var innerJson = {}; 
     innerJson["name"] = keys[key]; 
     var innerMap = dataMap[keys[key]]; 

     if (innerMap instanceof Array) { 
      innerJson["size"] = innerMap[0]; 
     } else if (innerMap instanceof Object) { 

      var child = processHirarchiachalData(innerMap); 
      innerJson["children"] = child; 
     } 
     json.push(innerJson); 

} 
Các vấn đề liên quan