原来JSON还可这样玩着
JOSN
JSON是一种数据格式,是JavaScript Object Notation的缩写。JSON作为JavaScript的一个严格子集,使用了JavaScript中的一些模式来表示结构化数据。
❏ 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript中的特殊值undefined。❏ 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。❏ 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。
JSON不支持变量、函数或者对象实例。虽然JSON看起来和对象有点相似,但是有几点区别之处:
1、JSON中没有变量的概念,所以在JSON中不能声明变量;
2、JOSN末尾没有分号;
3、JSON中的属性必须加上双引号。
JSON的两个方法
1、JSON.stringify(),把JavaScript对象转化为JSON字符串,在转化的过程中,对象里的函数或者原型成员都会被忽略,属性值为undefined的属性也会被跳过;
JSON.stringify()接受三个参数:
必选:需要序列化的JavaScript对象;
过滤器【可选】:可以是数组、函数;
可选:表示是否在JSON字符串中保留缩进。
const _json = {name:"读心悦",age:28
}const _json1 = JSON.stringify(_json,["name"])
console.log(_json);console.log(_json1)
如果过滤器是一个数组,数组中每一项要和将要序列化的对象中属性一一对应,这样在返回的结果字符串中只会包含对应的属性。
如果过滤器是一个函数,那么这个函数接收两个参数:属性名和属性值,函数根据属性名来判断如何处理需要序列化的对象中哪些属性。
const _json = {name: "读心悦",lat:"",age: 28,mon: [120, 234, 31, 654, 90]
}
const _json1 = JSON.stringify(_json, function (key, value) {switch (key) {case "name":return value;case "age":return value;case "mon":return value.join(",");case "lat":return "暂时未定位";default:return value;}
})
console.log(_json);console.log(_json1)
JSON.stringify()的第三个参数:控制JSON字符串中的缩进和空白符,如下每一项要缩进4个空格;
const _json = {name: "读心悦",lat:"",age: 28,mon: [120, 234, 31, 654, 90]
}
const _json1 = JSON.stringify(_json,null,4)
console.log(_json1)
打印的结果:
{"name": "读心悦","lat": "","age": 28,"mon": [120,234,31,654,90]
}
这个参数最大值为10个缩进空格,当设置的值大于10的时候,会自动转化为10。
const _json1 = JSON.stringify(_json,null,100)
{"name": "读心悦","lat": "","age": 28,"mon": [120,234,31,654,90]
}
另外,还有一个方法:toJSON(),这个方法是返回自身的JSON数据格式。可以给任何对象添加toJSON方的。
const _json = {name: "读心悦",lat:"",age: 28,mon: [120, 234, 31, 654, 90],toJSON:function(){return this.name}
}
const _json1 = JSON.stringify(_json)
console.log(_json1); // "读心悦"
如果给JSON.stringify()传入一个对象,那么在序列化该对象的顺序如下:
(1) 如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。
(2) 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
(3) 对第(2)步返回的每个值进行相应的序列化。
(4) 如果提供了第三个参数,执行相应的格式化。
2、JSON.parse(),把JSON字符串转化为相应的JavaScript的值,如果传给JSON.parse()的字符串不是有效的JSON,就会抛出异常。其实JSON.parse()方法可以说是JSON.stringify()的还原函数。除了接收一个JSON字符串之外,也可以接收另一个参数,是一个函数:
const _json = {name: "读心悦",lat: "",age: 28,mon: [120, 234, 31, 654, 90],test: {name: "青竹心"},
}
const _json1 = JSON.stringify(_json)
const _json2 = JSON.parse(_json1, function (key, value) {if(key=="name"){console.log("909090")}
})
console.log(_json2);
如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到结果中
原来JSON还可这样玩着相关推荐
- 区分json与jsonp
JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿,下边简单区分概括一下: JSON是 ...
- ajax传递对象数据集,用jquery和json从后台获得数据集的代码
其实Json也就是一种数据的格式,在后台将数据封转为一种格式,然后在前台用相同的方法解析,类似于序列化.json格式主要是由键值对组成,它可以表示多个数据.比如 {name:zhangsan,age: ...
- json数据解析_VBA 实践指南 -- Split函数解析Json数据
什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子 ...
- JSON 数据格式解析(转)
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.本文将快速讲解 JSON 格式,并通过代码示例演示如 ...
- JSON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON...
2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify后的字符串是 ...
- 黄聪:说说JSON和JSONP,也许你会豁然开朗(转)
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...
- JSON和JSONP【JS+AJAX跨域原理和实现】
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...
- JSON和JSONP
说说JSON和JSONP,也许你会豁然开朗 作者: 随它去吧 来源: 博客园 发布时间: 2012-07-16 14:33 阅读: 8069 次 推荐: 75 原文链接 [收藏] ...
- JSON是什么,为什么这么流行?
原文:https://www.sojson.com/blog/1.html 整编:Java技术栈(公众号ID: javastack) 1 JSON是什么? 前几天分享了<Spring Boot ...
最新文章
- 才知道百度也提供了智能DNS服务 - 加速乐
- python——面向对象篇之异常和反射
- SAP Spartacus里的标准Banner设计
- Kotlin之?和!!最简单的理解
- 干货 | 集成学习综述与代码实现
- C#实现秒杀器之网站登录
- 最新仿淘宝源码使用原生HTML+CSS描写
- 怎么查看计算机mac地址,怎么查电脑的mac地址?电脑mac地址查询方法
- 实战—深圳链家租房数据分析
- 高中生都能看懂的卡方检验
- 论strpos 的正确使用方式
- cisco路由器的时间标记
- C# RadioButton: 单选按钮控件
- 零基础学Arcgis(四)|空间数据采集与管理(1)Shapefile和dBASE文件的创建与管理
- 移动端接口文档管理工具apizza安装
- 国内DP厂家的相关资料信息
- 期货的价格代表什么(期货价格代表什么意思)
- Adobe Flash Lite
- Unity之UGUI-特效遮挡问题
- 一、HTTPS详解SSL TLS
热门文章
- 计算机图形学及前沿应用讲座心得,王泽晶-计算机图形学技术前沿讲座总结报告...
- 支付宝企业转账到个人账户
- 华为云迁移工具推荐最佳实践:物理服务器迁移到华为云
- 解决TypeError: conv2d() received an invalid combination of arguments
- 基于ROS使用Arduino控制水泵
- 2017年国家公务员考试行测错题集(省级)
- 小包实用工具:国家代码大全
- 三极管参数应用大全(转载)
- 求陈敏老师所著的《OPNET物联网仿真》中的模型IOT_Simulation.rar,万分感谢!
- 关于Python3爬虫抓取豆瓣电影的案例-利用正则表达式