我正在尝试序列化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”
重要的是编写数组的方式。
答案 0 :(得分:1)
结帐Convert a JSON object's keys into dot notation paths和Convert 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
)的数据参数。
答案 1 :(得分: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 :(得分: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));
答案 3 :(得分: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] [富] = ASD
答案 4 :(得分:0)
jQuery通过jQuery.param
提供此功能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将使用此方法自动序列化它。