簡體   English   中英

我如何制作JSON子節點(JSON內的JSON)?

[英]How i can make json child nodes (JSON inside JSON)?

我嘗試使用jquery + json獲取表單中的所有元素,並構建一個JSON變量以將其發布到ASP.NET MVC方法中。

 $.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;
 };


 $("#btnPost").click(function () {
     alert(JSON.stringify($("#frm").serializeObject())));
 }); 

該方法以表單的形式獲取所有字段並構建JSON,但不會將JSON放入JSON中。

例:

如果我有以下表格:

<input name="person.name"><input name="person.age"><input name="person.address.street">

序列化的字符串構建一個像這樣的JSON

{ "person.name": "??", "person.age": "??", "person.address.street": "??" }

我需要一個插件或一些函數來生成這樣的:

{ "person": { "name" : "??", "age" : "??", "address":{ "street": "??" } } }

您的問題不是“ JSON內的JSON”(反正這是一個錯誤的名稱-JSON支持嵌套就可以了),您的問題是您誤解了此過程的工作方式。

您的serializeObject()方法只是讀取名稱- 作為字符串 javascript中沒有任何東西可以使該過程“自動”為您解析點符號-句點僅被視為屬性名稱的一部分。

您需要在句點上分割名稱,然后進行相應處理。 一點遞歸就可以了。

$.fn.serializeObject = function()
{
  var o = {};
  var a = this.serializeArray();
  $.each( a, function()
  {
    if ( /\./.test( this.name ) )
    {
      resolveProperty( o, this.name.split( '.' ), this.value );                              
    } else {
      o[this.name] = this.value;
    }
  } );
  return o;

  function resolveProperty( object, properties, value )
  { 
    if ( properties.length > 1 )
    {
      var property = properties.shift();

      if ( 'undefined' == typeof object[property] )
      {
        object[property] = {};
      }
      resolveProperty( object[property], properties, value );
    } else {
      object[properties.shift()] = value;
    }
  }
};

暫無
暫無

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

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