2014-03-06 76 views
3

下面複雜的JavaScript對象是JSON的結構,我用它來查詢一個API如何創建JSON API

"order_items": [ 
     { 
      "menu_item_id": "VD1PIEBIIG", 
      "menu_item_name": "Create Your Own", 
      "modifiers": [ 
       { 
        "modifier_id": "6HEK9TXSBQ", 
        "modifier_name": "Shrimp" 
       } 
      ], 
      "quantity": "1", 
      "total": 15.99, 
      "variant_id": "TXDOR7S83E", 
      "variant_name": "X-Lg 18\"" 
     } 
    ] 

現在,我想打電話給使用JavaScript的HTML頁面此API(使用HTML元素,如表格和下拉菜單等)。我想創建一個適當結構的Javascript對象,然後使用「stringify」函數將其轉換爲JSON。但我無法創建Javascript對象。有人能幫忙嗎?

就像我想有以下結構

obj.order_items[0].menu_item_id="VD1PIEBIIG"; 
obj.order_items[0].menu_item_name="Create Your Own"; 
obj.order_items[0].modifiers[0].modifier_id="6HEK9TXSBQ"; 

等。

回答

1
var jsonToSend = { "order_items": [ ] }; 

// then for each order item 
var orderItem = { "menu_item_id": <whatever>, 
    "menu_item_name": <whatever>, 
    "quantity": <whatever>, 
    "total": <whatever>, 
    "variant_id": <whatever>, 
    "variant_name": <whatever>, 
    "modifiers": [] 
}; 

// then for each modifier 
var modifier = { "modifier_id": <whatever>, "modifier_name": <whatever> }; 
orderItem.modifiers.push(modifier); 

jsonToSend.order_items.push(orderItem); 

JSON.stringify(jsonToSend); 
+0

感謝。這很有幫助。乾杯 – BrownTownCoder

1

那麼有幾種方法可以做到這一點。

  • 手動創建JSON對象從HTML元素派:

    $.ajax({ 
         type: "POST", 
         url: "some.php", 
         data: new {"order_items": [ 
          { 
          "total": $('total').Val(), 
          "variant_id": $('variant_id').Val(), 
          "variant_name": $('variant_name').Val() 
          } 
        ]}) 
         .done(function(msg) { 
          alert("Data Saved: " + msg); 
        }); 
    
  • 你可以使用一個很大的框架,像KnockoutJs,這將讓你的JSON對象瞭解最新的表單,所以你不必手動完成。準備好後,只需將原始json提交回服務器即可。

查看JsFiddle

var ClickCounterViewModel = function() { 
    this.numberOfClicks = ko.observable(0); 

    this.registerClick = function() { 
     this.numberOfClicks(this.numberOfClicks() + 1); 
    }; 

    this.resetClicks = function() { 
     this.numberOfClicks(0); 
    }; 

    this.hasClickedTooManyTimes = ko.computed(function() { 
     return this.numberOfClicks() >= 3; 
    }, this); 
}; 

ko.applyBindings(new ClickCounterViewModel()); 
  • 您可以使用任意數量的插件,以序列化形式,這個基本的例子,但問題是獲得JSON結構恰到好處。

SerializeArray

$("form").submit(function(event) { 
     console.log($(this).serializeArray()); 
     event.preventDefault(); 
});