我正在尝试序列化一个 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);
我需要这样序列化数据:
"title=myTitle&description=myDescription&media[0].url=localhost&media[0].foo=asd"
重要的是数组的写入方式。
最佳答案
查看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
的数据参数中)。
关于JavaScript 对象转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351420/