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还可这样玩着相关推荐

  1. 区分json与jsonp

    JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿,下边简单区分概括一下: JSON是 ...

  2. ajax传递对象数据集,用jquery和json从后台获得数据集的代码

    其实Json也就是一种数据的格式,在后台将数据封转为一种格式,然后在前台用相同的方法解析,类似于序列化.json格式主要是由键值对组成,它可以表示多个数据.比如 {name:zhangsan,age: ...

  3. json数据解析_VBA 实践指南 -- Split函数解析Json数据

    什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子 ...

  4. JSON 数据格式解析(转)

    JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.本文将快速讲解 JSON 格式,并通过代码示例演示如 ...

  5. JSON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON...

    2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify后的字符串是 ...

  6. 黄聪:说说JSON和JSONP,也许你会豁然开朗(转)

    前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...

  7. 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可 ...

  8. JSON和JSONP【JS+AJAX跨域原理和实现】

    前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...

  9. JSON和JSONP

    说说JSON和JSONP,也许你会豁然开朗 作者: 随它去吧  来源: 博客园  发布时间: 2012-07-16 14:33  阅读: 8069 次  推荐: 75   原文链接   [收藏]   ...

  10. JSON是什么,为什么这么流行?

    原文:https://www.sojson.com/blog/1.html 整编:Java技术栈(公众号ID: javastack) 1 JSON是什么? 前几天分享了<Spring Boot ...

最新文章

  1. 才知道百度也提供了智能DNS服务 - 加速乐
  2. python——面向对象篇之异常和反射
  3. SAP Spartacus里的标准Banner设计
  4. Kotlin之?和!!最简单的理解
  5. 干货 | 集成学习综述与代码实现
  6. C#实现秒杀器之网站登录
  7. 最新仿淘宝源码使用原生HTML+CSS描写
  8. 怎么查看计算机mac地址,怎么查电脑的mac地址?电脑mac地址查询方法
  9. 实战—深圳链家租房数据分析
  10. 高中生都能看懂的卡方检验
  11. 论strpos 的正确使用方式
  12. cisco路由器的时间标记
  13. C# RadioButton: 单选按钮控件
  14. 零基础学Arcgis(四)|空间数据采集与管理(1)Shapefile和dBASE文件的创建与管理
  15. 移动端接口文档管理工具apizza安装
  16. 国内DP厂家的相关资料信息
  17. 期货的价格代表什么(期货价格代表什么意思)
  18. Adobe Flash Lite
  19. Unity之UGUI-特效遮挡问题
  20. 一、HTTPS详解SSL TLS

热门文章

  1. 计算机图形学及前沿应用讲座心得,王泽晶-计算机图形学技术前沿讲座总结报告...
  2. 支付宝企业转账到个人账户
  3. 华为云迁移工具推荐最佳实践:物理服务器迁移到华为云
  4. 解决TypeError: conv2d() received an invalid combination of arguments
  5. 基于ROS使用Arduino控制水泵
  6. 2017年国家公务员考试行测错题集(省级)
  7. 小包实用工具:国家代码大全
  8. 三极管参数应用大全(转载)
  9. 求陈敏老师所著的《OPNET物联网仿真》中的模型IOT_Simulation.rar,万分感谢!
  10. 关于Python3爬虫抓取豆瓣电影的案例-利用正则表达式