在 jQuery 中序列化为 JSON

IT技术 javascript jquery ajax json serialization
2021-01-28 00:50:51

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

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

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

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

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

JSON-js - JavaScript 中的 JSON。

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

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

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

var your_object = JSON.parse(json_text);

最近由John Resig推荐

...请开始将您使用 JSON 的应用程序迁移到 Crockford 的 json2.js。它与 ECMAScript 5 规范完全兼容,如果存在本机(更快!)实现,它会优雅地降级。

事实上,我昨天刚刚在 jQuery 中进行了更改,它使用 JSON.parse 方法(如果存在),现在它已完全指定。

我倾向于相信他在 JavaScript 问题上所说的话:)

所有现代浏览器(以及许多不古老的旧浏览器)都原生支持JSON 对象Crockford 的 JSON 库的当前版本只会定义JSON.stringifyJSON.parse如果它们尚未定义,则保留任何浏览器本机实现不变。

我实际上更喜欢 JSON3。它具有 AMD/requireJS 支持,而且它不使用 Crockform 自己称为“邪恶”的 eval。github.com/bestiejs/json3
2021-03-19 00:50:51
@pat,第二个“替换器”参数对于已知对象的自定义序列化非常有用。例如,我使用以下方法序列化 SVG 元素:JSON.stringify(obj, function(key, val) { if (val instanceof SVGSVGElement) {return val.xml || new XMLSerializer().serializeToString(val);} return val;})
2021-03-25 00:50:51
好点@Mark0978。仅作为解释,这里解释JSON.stringify 的参数我还没有看到第二个参数的良好用例,但最后一个参数非常有用:它指示格式化 JSON 字符串时要使用多少个空格缩进。
2021-03-27 00:50:51
在使用此解决方案之前检查问题:[ github.com/douglascrockford/JSON-js/pull/13]也许更安全的是调整此代码创建一些 JSON2 对象并使用它,而不管浏览器中的 JSON 支持。
2021-04-01 00:50:51
Crockford 的代码在使用一些更复杂的 jQuery 选择器时表现不佳。当我注释掉文件底部的 Object.prototype 修改时,它按预期工作。
2021-04-05 00:50:51

我已经使用jquery-json 6 个月了,效果很好。使用起来非常简单:

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

// Result: {"foo":"bar","baz":"wockaflockafliz"}
@EvanPlaice,jquery-json 不是 polyfill。它是一个使用本机功能(如果可用)的库。相反,JSON-js(特别json2.js)是一种polyfill,因为它提供了与浏览器提供的相同 JSON 对象和 API,但不会破坏本机功能(这意味着现代浏览器仍然可以获得高性能的本机实现)。
2021-03-15 00:50:51
@ripper234 我的意思是它使用本机 JSON.stringify/JSON.parse 方法(如果它们可用),否则它将回退到它自己的实现。基本上,它是一个用于 JSON 序列化的 polyfill。好处是无论您的用户浏览器是否原生支持,您都可以获得客户端 JSON 序列化。
2021-03-20 00:50:51
+1 如果您已经在使用 jQuery,这就是要走的路。JSON-js 作为一个独立的库非常棒,但这个插件将 JSON.stringify 和 JSON.parse 与 jQuery 无缝集成。这是一个双赢。恕我直言,这应该是公认的答案。
2021-03-24 00:50:51
@EvanPlaice - “无缝集成”是什么意思。通过在 JSON-js 上使用 jquery-json 有什么好处?
2021-03-26 00:50:51
我一直在寻找 IE6 JSON.stringify 替代品,这是迄今为止唯一的替代品。我的意思是,手动包含 json.js 效果很好,但会与 jQuery "$" 命名空间发生冲突。
2021-04-02 00:50:51

适用于 IE8+

不需要 jQuery,使用:

JSON.stringify(countries); 

我没用过,但你可能想试试Mark Gibson 写jQuery 插件

它添加了两个函数:$.toJSON(value), $.parseJSON(json_str, [safe])

请注意,$.parseJSON现在在 jQuery 核心中。
2021-03-17 00:50:51

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

如果您需要有关如何执行此操作的指导,我建议您检查一些可用库的来源。

编辑:我不会站出来说编写自己的串行化方法很糟糕,但是您必须考虑到,如果使用格式良好的 JSON 对您的应用程序很重要,那么您必须权衡“多一个”的开销依赖”,以防止您的自定义方法有一天会遇到您没有预料到的失败情况。该风险是否可以接受由您决定。

编写自己的 JSON 序列化方法很糟糕。在那里,我说了。:-)
2021-03-16 00:50:51
做别人已经做过的事情是不好的。我们大多数人的报酬是为了完成工作,而不是重新发明轮子。
2021-03-22 00:50:51