关于javascript:在jQuery中序列化为JSON

Serializing to JSON in jQuery

本问题已经有最佳答案,请猛点这里访问。

我需要将对象序列化为JSON。我正在使用jquery。有没有一种"标准"的方法来做到这一点?

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

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

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

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


JSON JS-JavaScript中的JSON。

要将对象转换为字符串,请使用JSON.stringify

1
var json_text = JSON.stringify(your_object, null, 2);

要将JSON字符串转换为对象,请使用JSON.parse

1
var your_object = JSON.parse(json_text);

John Resig最近建议:

...PLEASE start migrating
your JSON-using applications over to
Crockford's json2.js. It is fully
compatible with the ECMAScript 5
specification and gracefully degrades
if a native (faster!) implementation
exists.

In fact, I just landed a change in jQuery yesterday that utilizes the
JSON.parse method if it exists, now
that it has been completely specified.

我倾向于相信他在javascript上说的话:)

所有的现代浏览器(以及许多不古老的老浏览器)都支持本地的JSON对象。当前版本的crockford的json库只定义JSON.stringifyJSON.parse,如果它们还没有定义,那么任何浏览器本机实现都是完整的。


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

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

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


关于IE8+的作品

无需jquery,使用:

1
JSON.stringify(countries);


我没有用过,但你可能想试试马克·吉布森写的jquery插件。

它增加了两个功能:$.toJSON(value)$.parseJSON(json_str, [safe])


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

如果您想了解如何执行此操作的指导,我建议您检查一些可用库的源代码。

编辑:我不会说编写自己的serliation方法是不好的,但是您必须考虑,如果使用格式良好的JSON对您的应用程序很重要,那么您必须权衡"再一次依赖"的开销,以防有一天您的自定义方法可能会遇到一个您没有预料到的失败案例。并入。风险是否可以接受是你的决定。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$.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;
};