2013-06-27 85 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)。