我需要将一个对象序列化为JSON。我用的是jQuery。是否有一个“标准”的方法来做到这一点?

我的具体情况:我有一个数组定义如下所示:

var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...

我需要把它变成一个字符串传递给$.ajax()像这样:

$.ajax({
    type: "POST",
    url: "Concessions.aspx/GetConcessions",
    data: "{'countries':['ga','cd']}",
...

当前回答

我还没有用过它,但是你可能想试试Mark Gibson写的jQuery插件

它添加了两个函数:$. tojson (value), $. tojson (value)。parseJSON (json_str[安全])。

其他回答

基本上分为两步:

首先,你需要像这样进行字符串化:

var JSON_VAR = JSON.stringify(OBJECT_NAME, null, 2); 

之后,你需要将字符串转换为Object:

var obj = JSON.parse(JSON_VAR);

适用于IE8+

不需要jQuery,使用:

JSON.stringify(countries); 

不,序列化到JSON的标准方法是使用现有的JSON序列化库。如果您不希望这样做,那么您将不得不编写自己的序列化方法。

如果您需要关于如何做到这一点的指导,我建议检查一些可用库的源代码。

编辑:我并不是说编写自己的serliazation方法不好,但是您必须考虑到,如果使用格式良好的JSON对您的应用程序很重要,那么您必须权衡“多一个依赖项”的开销与自定义方法可能有一天遇到您没有预料到的失败情况的可能性。这种风险是否可接受由你决定。

我确实在某个地方找到了这个。但不记得在哪里了……可能在StackOverflow:)

$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

我已经使用jquery-json 6个月了,它工作得很好。使用起来非常简单:

var myObj = {foo: "bar", "baz": "wockaflockafliz"};
$.toJSON(myObj);

// Result: {"foo":"bar","baz":"wockaflockafliz"}