这个问题在这里已有答案:
我需要将对象序列化为JSON . 我正在使用jQuery . 是否有“标准”方法来做到这一点?
我的具体情况:我有一个定义如下所示的数组:
var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...
我需要将其转换为字符串以传递给 $.ajax()
,如下所示:
$.ajax({
type: "POST",
url: "Concessions.aspx/GetConcessions",
data: "{'countries':['ga','cd']}",
...
11 回答
如果您不想使用外部库,则有
.toSource()
本机JavaScript方法,但它不是完全跨浏览器的 .我已经使用了jquery-json 6个月了,效果很好 . 它使用起来非常简单:
我没用过它,但你可能想试试 jQuery plugin written by Mark Gibson
它添加了两个函数:
$.toJSON(value)
,$.parseJSON(json_str, [safe])
.这基本上是两步过程:
首先,你需要像这样进行字符串化
之后,您需要将字符串转换为Object
我确实找到了这个地方 . 不记得在哪里...可能在StackOverflow :)
最好的方法是包含JSON对象的polyfill .
但是如果你坚持在jQuery命名空间内创建一个将对象序列化为JSON表示法(valid values for JSON)的方法,你可以这样做:
实施
用法
是的,在调用$ .ajax之前,你应该JSON.stringify和JSON.parse你的“Json_PostData”
JSON-js - JavaScript中的JSON .
要将对象转换为字符串,请使用
JSON.stringify
:要将JSON字符串转换为对象,请使用
JSON.parse
:最近由John Resig推荐:
我倾向于相信他在JavaScript问题上所说的话:)
Newer browsers本地支持JSON object . Crockford的JSON库的当前版本将仅定义
JSON.stringify
和JSON.parse
,如果它们尚未定义,则保留任何浏览器本机实现 .不,序列化为JSON的标准方法是使用现有的JSON序列化库 . 如果您不希望这样做,那么您将不得不编写自己的序列化方法 .
如果您需要有关如何执行此操作的指导,我建议您检查一些可用库的来源 .
EDIT: 对于您的应用程序来说,使用格式正确的JSON非常重要,那么您必须权衡"one more dependency"的开销与您的自定义方法有一天可能遇到您未曾预料到的故障情况的可能性 . 您的电话是否可以接受这种风险 .
Works on IE8+
不需要jQuery,使用:
上述解决方案没有考虑的一件事是,如果您有一个输入数组但只提供了一个值 .
例如,如果后端需要一组People,但在这种特殊情况下,您只需要处理一个人 . 然后做:
然后使用之前的解决方案,它只会映射到以下内容:
但它应该真正映射到
要解决此问题,输入应如下所示:
你会使用以下功能(基于其他解决方案,但扩展了一点)