JS中的JSON

相关知识点:

  • JSON是一种数据交换格式,基于文本,优于轻量,用于交换数据。
  • JSON可以表示数字、布尔值、字符串、null、数组(值得有序序列),以及由这些值(数组,对象)组成的对象(字符串与值的映射)
  • JSON使用JavaScript语法,但是JSON格式仅仅是一个文本,文本可以被任何编程语言作为数据格式传递。

我对JSON的理解:
JSON是一种基于文本的轻量级的数据交换格式可以被任何变成语言读取和作为数据的格式传递。

在项目的开发中,我们使用JSON作为前后端数据交换的方式。在前端我们通过一个将符合JSON格式的数据结构序列化为JSON字符串。然后将它传递到后端,后端通过JSON格式的字符串解析后生成对应的数据结构,以此来实习前后端数据的传递。

因为JSON的语法是基于JS的,因此很容易将JSON和JS中的对象弄混,但是我们应该注意的是JSON和JS中的对象不是一回事,JSON中对象格式更加严格。比如说:在JSON中属性值不能为函数,不能出现NaN这样的属性值,因此大多数的js对象是不符合JSON格式的。

在JS中提供了两个函数来实现JS数据结构和JSON格式的转化处理:

  • JSON.stringify函数,通过传入一个符合JSON格式的数据结构,将其转化为一个JSON字符串,如果传入的数据不符合JSON格式,那么在序列化的时候会对这些值进行对应的特殊处理,使其符合规范,在前端向后端发送数据时,我们可以调用这个函数将数据对象转化为JSON格式的字符串。
  • JSON.parse函数,这个函数用来将JSON格式的字符串转化为一个JS数据结构,如果传入的字符不是标准的JSON格式的字符串的话,会抛出错误,当我们从后端接收到JSON格式的字符串时,我们可以通过这个方法来将其解析为一个js数据结构,以此来进行数据的访问。
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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值