
在本文中,我们将研究对象序列化,当前浏览器实现的好处,并开发一些可以帮助您基于AJAX的项目的代码。
假设我们使用文字符号定义了一个相当复杂的JavaScript对象:
var obj1 = {
b1: true,
s1: "text string",
n1: 12345,
n2: null,
n3: undefined,
a1: [ 1,1,2,3,5,8, [13, 21, 34] ],
o1: {
a: [3, 2, 1],
b: {
c: 42,
d: [ 3.14, 1.618 ]
}
}
};
登录后复制
登录后复制
我们可以以多种方式访问任何对象属性:
obj1.s1; // returns "text string"
obj1["n1"]; // returns 12345
obj1.a1[6][1]; // returns 21
obj1["o1"]["b"]["c"]; // returns 42
登录后复制
该对象也可以传递给JavaScript函数和方法,而不是指定单个参数。有用的东西。
但是,如果我们需要将此对象存储在cookie中怎么办?如果我们需要通过AJAX请求将对象传递到Web服务怎么办?如果该Web服务要返回对象的修改版本怎么办?答案是序列化:
- 序列化是将任何对象变成字符串的过程。>
> de-Serialization将字符串转回本机对象。
-
也许我们可以在JavaScript中使用的最佳字符串表示法是JSON - JavaScript对象表示法。 JSON是一种受JavaScript对象文字符号启发的轻量级数据交换格式,如上所示。 JSON得到PHP和许多其他服务器端语言的支持(请参阅JSON.org)。
JavaScript中有两种JSON方法:
> json.stringify(
obj- ) - 将JavaScript对象转换为JSON String
> json.parse(
str- ) - 将json字符串转换回JavaScript对象
不幸的是,很少有浏览器提供这些方法。迄今为止,仅Firefox 3.5,Internet Explorer 8.0和Chrome 3 Beta提供本地支持。一些JavaScript库提供了自己的JSON工具(例如YUI
)但是许多人没有(包括jQuery)。
但是,一切都没有丢失 - JavaScript是灵活的,只要浏览器需要它们,我们就可以实现JSON Stringify和解析方法。
在代码的顶部,我们将创建一个JSON变量,该变量指向本机JSON对象或一个空对象,如果它不可用:
JSON.STRINGIFY代码更为复杂:
如果JSON.STRINGIFY不可用,我们将定义一个接受单个OBJ参数的新功能。该参数可以是单个值,数组或复杂对象,例如上面的OBJ1。
该代码检查对象类型。立即返回单个值,并且仅修改字符串以在值周围列出引号。
如果传递数组或对象,则代码将通过每个属性迭代:
var JSON = JSON || {};
登录后复制
// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = '"'+obj+'"';
return String(obj);
}
else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n]; t = typeof(v);
if (t == "string") v = '"'+v+'"';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : '"' + n + '":') + String(v));
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};
登录后复制
字符串值添加了引号。
>
- 儿童数组或对象被递归传递到JSON.STRINGIFY函数。
将结果值添加到JSON []数组的末尾,作为“名称:值”字符串,或者仅是数组项的单个值。>
- >最后,JSON数组转换为逗号删除列表,并在数组[]或Object {}中返回必要时支架。
如果您的大脑感到疼痛,您会很高兴知道JSON.PARSE代码要简单得多:
var obj1 = {
b1: true,
s1: "text string",
n1: 12345,
n2: null,
n3: undefined,
a1: [ 1,1,2,3,5,8, [13, 21, 34] ],
o1: {
a: [3, 2, 1],
b: {
c: 42,
d: [ 3.14, 1.618 ]
}
}
};
登录后复制
登录后复制
这将JSON字符串转换为对象()。
在您急于在所有项目中实施JSON序列化功能之前,有一些陷阱:
- 此代码已故意保持短缺。它在大多数情况下都会起作用,但是与本机JSON.Stringify和JSON.PARSE方法。
并非支持每个JavaScript对象。例如,date()将返回一个空对象,而本机JSON方法将其编码为日期/时间字符串。
- 代码将序列化函数,例如var obj1 = {myfunc:function(x){}};而本机JSON方法不会。
>
- 非常大的对象会丢弃递归错误。
- 在JSON.PARSE中使用est()的使用本质上是风险的。如果您调用自己的Web服务,那将不是问题,但是对第三方应用程序的电话可能会意外或故意破坏您的页面并引起安全问题。如有必要,可从json.org获得更安全(但较慢)的JavaScript解析器。
希望您发现代码有用。随时在自己的项目中使用它。
资源文件:
-
json序列化演示页
完整的JavaScript代码(JSON-Serialization.js)-
>在zip文件中下载完整代码-
相关阅读:
-
如何开发jQuery插件
>如何构建自动扩展textarea jQuery插件-
- 即将推出:JSON Serialization的有用应用…
经常询问有关JavaScript JSON Serialization
的问题
> javaScript中的JSON序列化是什么?这是使用JSON.STRINGIFY()方法完成的。可以将结果的JSON字符串存储或发送到服务器。这是Web开发中的一个关键过程,因为它允许在客户端和服务器之间轻松传输数据。
>
如何在JavaScript?
json.stringify()中是JavaScript中的一种方法,将javascript对象转换为json字符串。这是一个简单的例子:
console.log(myjson); myjson);
在此示例中,在此示例中,使用Javascript对象“ json” json in json in json in json in json in json in json ins in jons ins in json ins string ins in jons ins in json ins string ins string ins string string string( 'myjson'。
>我可以在javascript中序列化数组吗?此方法不仅可以与简单的数组,还可以与对象数组一起使用。这是一个示例:
让arr = [1,2,3,4];
console.log(myjson);在此示例中,阵列'arr''array'array'转换为json string。>如何在JavaScript中的JSON字符串? 让myjson ='{“ name”:“ john”,“ age”:30,“ city”:“ new York”}';
let obj = json.parse(myjson);
console.log(obj); obj> consoper; JSON.PARSE()。
>如果我尝试在JavaScript中序列化函数?
>如果您尝试使用JSON.STRINGIFY()在JavaScript中序列化函数,该函数将被忽略并且不会出现在结果的JSON字符串中。这是因为JSON是一种数据格式,并且不支持JavaScript的执行能力。我可以在JavaScript中自定义序列化过程?这使您可以在序列化过程中过滤或修改它们。> JavaScript JSON序列化中有什么非常打印的?
非常打印是一种以更可读的方式格式化所得JSON字符串的方法。这是通过将数字作为JSON.STRINGIFY()的第三个参数来完成的,该数字代表要用于凹痕的空间数量。
我可以在javascript中序列化并在javascript?
中进行序列化日期,但是需要一些额外的步骤。默认情况下,当您在JavaScript中序列化日期对象时,它将以ISO格式转换为字符串。当您对其进行估算化时,它不会自动转换回日期对象。您需要使用新的date()构造函数。当对象具有tojson()方法时,json.stringify()调用它并序列化其返回的值,而不是原始对象。
我可以在JSON序列化时处理大型数字吗? JavaScript可以准确地表示最多2^53 - 1的数字。如果您需要序列化数字,则可能需要先将其转换为字符串,以避免精确损失。>
以上是JavaScript中的跨浏览器JSON序列化的详细内容。更多信息请关注PHP中文网其他相关文章!