[英]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.