分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

JS高程3:JSON

发布时间:2023-09-06 01:12责任编辑:顾先生关键词:暂无标签

JSON,JavaScript Object Notation,JS对象表示法,是目前最常见的结构化数据传输形式。

JSON并非编程语言,而是一种数据结构,像mp4、avi一样,只是一种数据格式而已。(数据结构可以包含很多数据类型)

JSON值的类型

  • 简单值
  • 对象
  • 数组

简单值:字符串、数字、布尔值和null,注意不包括undefined。

注意:JSON中的字符串必须用双引号。

对象:对象就是无序的键值对,而键值中的值也可以是简单值、对象或者数组。

注意:JSON中对象的属性必须用双引号括起来,JSON中没有变量的概念。

数组:有序的值的列表,而值本身可以是简单值、对象或者数组。

解析与序列化

JS中有个全局对象JSON,该对象有stringify()和parse()方法,分别用来序列化JS和解析JSON。

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,};var j1 = JSON.stringify(obj);console.log(j1);var j2 = JSON.parse(j1);console.log(j2)

 注意:因为JSON中没有undefined数据类型,所以该键值会被忽略。

{"name":"leo","age":19,"marry":false,"none":null}{name: "leo", age: 19, marry: false, none: null}

序列化选项

JSON.stringify()函数还可以接收第二个和第三个参数,用来实现更为丰富的功能。

过滤

第二个参数可以是一个数组,数组包含对象属性的字符串形式:

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,};var j1 = JSON.stringify(obj,["name","age",]);console.log(j1); //{"name":"leo","age":19}

 如果参数是函数:

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,};var j1 = JSON.stringify(obj,function(key,value){switch(key){case "age":return 20;case "none":return "没有";case "marry":return "false";default:return value;}});console.log(j1); //{"name":"leo","age":20,"marry":"false","none":"没有"}

缩进

如果想缩进4空格:

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,};var j1 = JSON.stringify(obj,null,4);console.log(j1);
{ ???"name": "leo", ???"age": 19, ???"marry": false, ???"none": null}

注意:最大缩进为10格。

特殊字符:

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,};var j1 = JSON.stringify(obj,null,"-->");console.log(j1);
{-->"name": "leo",-->"age": 19,-->"marry": false,-->"none": null}

使用toJSON:

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,toJSON: function(){return this.name;}};var j1 = JSON.stringify(obj);console.log(j1); //"leo"

序列化该对象的顺序如下

(1) 如果存在 toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。(2) 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。(3) 对第(2)步返回的每个值进行相应的序列化。(4) 如果提供了第三个参数,执行相应的格式化。

解析选项

JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对儿上调用 。

var obj = {name: "leo",age: 19,marry: false,other: undefined,none: null,releaseDate: new Date(2011, 11, 1),};var j1 = JSON.stringify(obj);console.log(j1);var j2 = JSON.parse(j1,function(key,value){if (key == "releaseDate"){return new Date(value);} else {return value;}});console.log(j2);console.log(j2.releaseDate.getFullYear());
{"name":"leo","age":19,"marry":false,"none":null,"releaseDate":"2011-11-30T16:00:00.000Z"}{name: "leo", age: 19, marry: false, none: null, releaseDate: Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间)}age: 19marry: falsename: "leo"none: nullreleaseDate: Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间) {}__proto__: Object2011

还原函数在遇到"releaseDate"键时,会基于相应的值创建一个新的 Date 对象。结果就是
bookCopy.releaseDate 属性中会保存一个 Date 对象。正因为如此,才能基于这个对象调用
getFullYear()方法。

JS高程3:JSON

原文地址:http://www.cnblogs.com/leomei91/p/7560672.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved