JSON处理:兼容IE8的json2.js及JSON循环结构支持

需积分: 1 13 下载量 123 浏览量 更新于2024-12-20 收藏 7KB 7Z 举报
资源摘要信息:"json2 js json格式处理包" 1. JSON概述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,使得它易于人阅读和编写,同时也易于机器解析和生成。JSON常用于网络数据交换格式,特别是在Web应用开发中。当2009年12月ECMA大会通过ECMAScript编程语言标准第五版(ECMAScript 5)时,JSON成为JavaScript的内置特性。 2. json2.js的功能和作用 json2.js是一个JavaScript库,它在全局对象中创建一个JSON属性,如果这个属性尚未存在的话。该属性包含了两个方法:`stringify`和`parse`。`stringify`方法用于将JavaScript对象转换为JSON格式的字符串,而`parse`方法则用于将JSON格式的字符串解析为JavaScript对象。 - `JSON.stringify(obj)`方法接受一个JavaScript对象作为参数,并返回一个表示该对象的JSON字符串。 - `JSON.parse(str)`方法接受一个JSON格式的字符串作为参数,并返回该字符串表示的JavaScript对象。 在json2.js中,`parse`方法使用JavaScript的`eval()`函数进行解析,为了防止代码注入,作者使用了几个正则表达式作为保护措施,以防止意外的代码执行风险。需要注意的是,在现代浏览器中,原生的`JSON`对象通常已经足够好用,且更安全,因此通常没有必要使用json2.js。如果需要支持IE8或更早版本的浏览器,才可能会考虑使用json2.js。 3. cycle.js的特殊功能 cycle.js文件提供了两个函数,分别是`JSON.decycle`和`JSON.retrocycle`。这两个函数允许开发者编码循环结构和dag(有向无环图)到JSON字符串中,并且能够将它们恢复成原始的JavaScript对象。 - `JSON.decycle(obj)`函数可以处理循环引用的JavaScript对象,生成一个没有循环引用的JSON字符串,使它能够安全地序列化。 - `JSON.retrocycle(str)`函数则可以将`JSON.decycle`生成的JSON字符串还原为含有循环引用的JavaScript对象。 这种处理循环引用的能力在JSON标准中是不支持的,因此cycle.js提供了一种补充机制,这对于需要处理复杂数据结构的应用程序非常有用。 4. JSONPath的介绍 在cycle.js的上下文中,提到了JSONPath,这是一种查询语言,用于从JSON对象中选取节点。JSONPath类似于XPath和CSS选择器,它可以用来在复杂的JSON结构中高效地定位信息。它通常用于处理嵌套的数据结构,以便于提取或更新特定部分的数据。 5. 标签涉及的知识点 - JSON是一种数据交换格式,广泛用于网络数据传输。 - JavaScript是一种编程语言,是Web开发的核心技术之一。 - 正则表达式是一种文本模式匹配和处理的工具,在处理字符串时非常有用。 - 开发语言泛指用于软件开发的各种编程语言。 - ECMAScript是JavaScript语言的标准化版本,ECMAScript 5是该语言的一个重要版本。 6. 压缩包子文件的文件名称列表 - JSON-js-master可能是一个包含多个JSON处理相关文件的压缩包,这些文件可能包括json2.js和cycle.js等。 通过上述的详细说明,我们可以看到json2.js和cycle.js这两个文件主要处理了在JavaScript环境中JSON数据的序列化与反序列化,包括特殊处理循环引用的能力。同时,通过JSONPath的介绍,我们了解到还有这样一种查询语言的存在,能够帮助我们从复杂的JSON结构中提取我们需要的数据。这些知识点对于前端开发、后端服务以及数据交换场景都是非常重要的。
2018-10-29 上传
This file creates a global JSON object containing two methods: stringify and parse. JSON.stringify(value, replacer, space) value any JavaScript value, usually an object or array. replacer an optional parameter that determines how object values are stringified for objects. It can be a function or an array of strings. space an optional parameter that specifies the indentation of nested structures. If it is omitted, the text will be packed without extra whitespace. If it is a number, it will specify the number of spaces to indent at each level. If it is a string (such as '\t' or ' '), it contains the characters used to indent at each level. This method produces a JSON text from a JavaScript value. When an object value is found, if the object contains a toJSON method, its toJSON method will be called and the result will be stringified. A toJSON method does not serialize: it returns the value represented by the name/value pair that should be serialized, or undefined if nothing should be serialized. The toJSON method will be passed the key associated with the value, and this will be bound to the value For example, this would serialize Dates as ISO strings. Date.prototype.toJSON = function (key) { function f(n) { // Format integers to have at least two digits. return n < 10 ? '0' + n : n; } return this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z'; }; You can provide an optional replacer method. It will be passed the key and value of each member, with this bound to the containing object. The value that is returned from your method will be serialized. If your method returns undefined, then the member will be excluded from the serialization. If the replacer parameter is an array of strings, then it will be used to select the members to be serialized. It filters the results such that only members with keys listed in the replacer array are stringified. Values that do not have JSON representations, such as undefined or functions, will not be serialized. Such values in objects will be dropped; in arrays they will be replaced with null. You can use a replacer function to replace those with JSON values. JSON.stringify(undefined) returns undefined. The optional space parameter produces a stringification of the value that is filled with line breaks and indentation to make it easier to read. If the space parameter is a non-empty string, then that string will be used for indentation. If the space parameter is a number, then the indentation will be that many spaces. Example: text = JSON.stringify(['e', {pluribus: 'unum'}]); // text is '["e",{"pluribus":"unum"}]' text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' text = JSON.stringify([new Date()], function (key, value) { return this[key] instanceof Date ? 'Date(' + this[key] + ')' : value; }); // text is '["Date(---current time---)"]' JSON.parse(text, reviver) This method parses a JSON text to produce an object or array. It can throw a SyntaxError exception. The optional reviver parameter is a function that can filter and transform the results. It receives each of the keys and values, and its return value is used instead of the original value. If it returns what it received, then the structure is not modified. If it returns undefined then the member is deleted. Example: // Parse the text. Values that look like ISO date strings will // be converted to Date objects. myData = JSON.parse(text, function (key, value) { var a; if (typeof value === 'string') { a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); if (a) { return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6])); } } return value; }); myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { var d; if (typeof value === 'string' && value.slice(0, 5) === 'Date(' && value.slice(-1) === ')') { d = new Date(value.slice(5, -1)); if (d) { return d; } } return value; }); This is a reference implementation. You are free to copy, modify, or redistribute.