javascript对象到字符串

时间:2013-06-27 19:15:09

标签: javascript jquery ajax arrays

我正在尝试序列化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”

重要的是编写数组的方式。

5 个答案:

答案 0 :(得分:1)

结帐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)的数据参数。

答案 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

http://jsfiddle.net/bLu8Q/

答案 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将使用此方法自动序列化它。