2011-06-08 123 views
3

我有一个名称为'config[display][x]', 'config[display][y]', 'config[port]',...的表格,或者我可以创建不同的格式。 ,我想它序列化到JS对象像Javascript序列化对象的形式

{config: 
    display : {x : 'value', y : 'value'}, 
    port : 'value' 
} 

有人知道现有解决方案做到这一点?

p.s.我可以使用jQuery的.serializeArray()序列化表单,但是我将使用简单的{name:name,value:value}哈希表进行数组化。但是如何创建对象?

回答

0

序列化的JavaScript对象为字符串,使用方法:

var str = JSON.stringify(obj); 

反序列化一个字符串转换为JavaScript对象,用途:

var obj = JSON.parse(str); 

如果您使用的是较旧的浏览器不支持这些方法,您可以使用Douglas Crockford的JSON2库。

+0

和?表单名称 - 只是字符串 – Falcon 2011-06-08 14:44:35

2

我使用本Almans .serializeObject()和它的工作进行全面讨论。

http://benalman.com/projects/jquery-misc-plugins/#serializeobject

的代码是体积小,易于:

$.fn.serializeObject = function(){ 
    var obj = {}; 

    $.each(this.serializeArray(), function(i,o){ 
     var n = o.name, 
     v = o.value; 

     obj[n] = obj[n] === undefined ? v 
      : $.isArray(obj[n]) ? obj[n].concat(v) 
      : [ obj[n], v ]; 
    }); 

    return obj; 
}; 
+0

这不会正确地序列化数组和嵌套属性。 – 2016-03-10 07:59:56

0

我相信这是你所追求的:

function assignByPath(obj,path,value){ 
    if (path.length == 1) { 
     obj[path[0]] = value; 
     return obj; 
    } else if (obj[path[0]] === undefined) { 
     obj[path[0]] = {}; 
    } 
    return assignByPath(obj[path.shift()],path,value); 
} 

$.fn.serializeObject = function(){ 
    var obj = {}; 

    $.each(this.serializeArray(), function(i,o){ 
     var n = o.name, 
     v = o.value; 
     path = n.replace('[','.').replace('][','.').replace(']','').split('.'); 

     assignByPath(obj,path,v); 
    }); 

    return obj; 
}; 
3

https://github.com/serbanghita/formToObject - 还有与现有解决方案进行比较。

var myFormObj = formToObject('myFormId'); 
/* 
    console.log(myFormObj); 
    { 
    saveSettings: 'Save', 
    name: 'Serban', 
    race: 'orc', 
    settings: { 
     input: 'keyboard', 
     video: { 
      resolution: '1024x768', 
      vsync: 'on' 
     } 
    } 
    } 
*/ 
+0

这个发现是黄金! – LessQuesar 2016-02-26 00:11:21

+0

目前,如果你想使用数组,目前,https://github.com/serbanghita/formToObject.js/issues/17会阻碍你。 – 2016-03-10 08:02:15

+0

@Xr。同意,这就是为什么我决定拆开图书馆并进行单元测试。我需要回归才能解决这个问题。我需要对此进行排序,因为在JavaScript中不能使用文字键组成数组。感谢您的反馈! – 2016-03-10 10:53:00