簡體   English   中英

從表單獲取JSON

[英]Getting JSON from Form

我正在使用以下函數將表單代碼轉換為JSON,這非常有用,而且效果很棒

$.fn.serializeObject = function()
        {
           var o = {};
           var a = this.serializeArray();
           $.each(a, function() {
               if (o[this.name]) {
                   if (!o[this.name].push) {
                       o[this.name] = [o[this.name]];
                   }
                   o[this.name].push(this.value || '');
               } else {
                   o[this.name] = this.value || '';
               }
           });
           return o;
        };

現在它給我的結果為:[如果表單字段具有不同的名稱],並且表單字段名稱為direction1,direction2,direction3

{direction1: "abc", direction2: "xyz", direction3: "def"}

如果它們具有相同的名稱,請說出所有表單字段的address :它將它們組合為:

Object {address: Array[3]} address: Array[3] 0: "dfddf" 1: "dfdfdf" 2: "fewwewe"length: 3

哪個是對的

我試圖得到的結果為:

{"address": "abc"}, 
{"address": "xyz"}, 
{"address": "def"}

我該如何進行更改

我被剝奪了睡眠,所以有更好的方法可以做到這一點,但是據我了解,這似乎可以滿足您的要求。 這將使每個數組成為{"objkey": valAtIndex }形式的{"objkey": valAtIndex } 因此,在這種情況下, Object {address: Array[3]} address: Array[3] 0: "dfddf" 1: "dfdfdf" 2: "fewwewe"length: 3將變為:

{"address":[
  {"address": "dfddf"}, 
  {"address": "dfdfdf"}, 
  {"address": "fewwewe"}
]}

DEMO

HTML

<form action="" id="form">
  <input type="text" name='address' value='123' />
  <input type="text" name='address' value='456' />
</form>

JS

$.fn.serializeObject = function() {
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};
$(function() {
  var t = $('#form').serializeObject();
  Object.keys(t).forEach(function(key) {
    if (t[key].constructor === Array) {
      t[key].forEach(function(a, i) {
        var obj = {};
        obj[key] = a;
        t[key][i] = obj;
      });
    }
  });
  var myAddresses = t["address"];

  console.log(JSON.stringify(myAddresses, null, 4));
});

編輯:要訪問它們,請如上所述使用t["address"] 在運行代碼后查看控制台,您將看到:

[
    { "address": "123" },
    { "address": "456" }
]

編輯:刪除了令人困惑的“結果”部分。

看起來您只是在擴展對象,而不是根據需要創建數組。 無論您想要的是JSON類對象還是Array,如果要將它們作為單獨的對象,仍需要具有與每個對象相對應的鍵。 因此,代替:

  o[this.name]=this.value

你需要

    var obj={};
    obj[this.name]=this.value;

然后:

    o.push(obj);

要么:

    o[a key of your definition]=obj;

這樣,您就可以根據需要在o內提供單獨的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM