2011-06-08 31 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