2013-06-27 52 views
1

我想序列化一個JavaScript對象,但與特定的形式(我認爲它必須是一種方法)。 實施例:JavaScript對象到字符串

var media = new Object(); 
media.url = "localhost"; 
media.foo = "asd" 

var data=new Object(); 
data.title = "myTitle"; 
data.description = "myDescription"; 
data.media.push(media); 

我需要序列數據是這樣的:

「標題= myTitle &描述= myDescription &媒體[0] = .URL本地主機&媒體[0]包含.foo = ASD 「

重要的是數組寫入的方式。

+2

這是用於jQuery AJAX函數嗎?如果你給它一個對象作爲'data:'選項,它會爲你序列化。 – Barmar

+0

提示:'new Object == {012'''''' – elclanrs

+3

你忘了初始化'data.media' – Bergi

回答

0

有多種方式將對象序列到的參數的列表(字符串),看看:

How to serialize an Object into a list of parameters?

一個例子是這樣的方法,如以下:

var str = ""; 
for (var key in obj) { 
    if (str != "") { 
     str += "&"; 
    } 
    str += key + "=" + obj[key]; 
} 

您可以修改它以適合您需要的樣式。

+2

除了處理遞歸對象外,還需要調用'encodeURIComponent()'。 – Barmar

+0

謝謝,我做了類似於你的迴應 – Federico

0

對不起,但我需要改變。我認爲這很容易,但在看結果時我發現它並不那麼直截了當。如果你正在使用jQuery雖然你可以簡單地做這樣的:

var media = new Object(); 
media.url = "localhost"; 
media.foo = "asd" 

var data=new Object(); 
data.title = "myTitle"; 
data.description = "myDescription"; 
data.media = []; // you forgot this... 
data.media.push(media); 

var data = $.param(data)); 
+0

這不適用於嵌套數組。 –

+0

據我所知,沒有被要求。 – Asken

+0

這樣的事情,但支持陣列 – Federico

0

可以使用jQuery.param做到這一點:

$.param({a:'2', b: 1.2, c: "hello world"})// -> a=2&b=1.2&c=hello+world 

EDIT 

我上面所缺少的是陣列支持對不起回合那。

爲此,您需要decodeURIComponent()

var media = new Object(); 
media.url = "localhost"; 
media.foo = "asd" 

var data=new Object(); 
data.title = "myTitle"; 
data.description = "myDescription"; 
data.media = []; 
data.media.push(media); 
alert(decodeURIComponent($.param(data))); 

輸出:

標題= myTitle &描述= myDescription &媒體[0] [URL] =本地主機&媒體[0] [ FOO] = ASD

http://jsfiddle.net/bLu8Q/

0

的jQuery經由提供了此

var params = $.param(data); 
console.log(params); 

產地:

title=myTitle&description=myDescription&media%5B0%5D%5Burl%5D=localhost&media%5B0%5D%5Bfoo%5D=asd 

正如你所看到的,它處理嵌套數組和對象,如你所願(%5B%5D[] URL編碼)。

如果您使用的是$.ajax()或其中一個快捷鍵,則不需要明確調用它。如果您提供對象作爲data參數或選項,則jQuery將使用此方法自動對其進行序列化。

0

結帳Convert a JSON object's keys into dot notation pathsConvert complex JavaScript object to dot notation object。您可以輕鬆地適應那些處理你的數組鍵特殊:

function transform(obj) { 
    var result = {}; 
    recurse(obj, ""); 
    return result; 
    function recurse(o, name) { 
     if (Object(o) !== o) 
      result[name] = o; 
     else if (Array.isArray(o)) 
      for (var i=0; i<o.length; i++) 
       recurse(o[i], name+"["+i+"]"); 
     else // if plain object? 
      for (var p in o) 
       recurse(o[p], name?name+"."+p:p); 
    } 
} 

然後,您可以對結果應用$.param得到URL編碼等:

$.param(transform(data)) 

(或只是把它傳遞到數據參數的$.ajax)。