理解 JSON 的数据储存工作原理及对象和文本间的转换方法
目标: 理解 JSON 的数据储存工作原理及对象和文本间的转换方法。
什么是 JSON?
JSON 是一种按照JavaScript对象语法的数据格式。虽然它是基于 JavaScript 语法,但它独立于JavaScript,这也是为什么许多程序环境能够读取(解读)和生成 JSON。
JSON可以作为一个对象或者字符串存在,前者用于解读 JSON 中的数据,后者用于通过网络传输 JSON 数据。 这不是一个大事件——JavaScript 提供一个全局的 可访问的 JSON 对象来对这两种数据进行转换。
一个 JSON 对象可以被储存在它自己的文件中,这基本上就是一个文本文件,扩展名为 .json, 还有 MIME type 用于 application/json
.
JSON 结构
我们已经可以推测出 JSON 对象就是基于 JavaScript 对象,而且这几乎是正确的。您可以把 JavaScript 对象原原本本的写入 JSON 数据——字符串,数字,数组,布尔还有其它的字面值对象。这允许您构造出一个对象树,如下:
{"squadName" : "Super hero squad","homeTown" : "Metro City","formed" : 2016,"secretBase" : "Super tower","active" : true,"members" : [{"name" : "Molecule Man","age" : 29,"secretIdentity" : "Dan Jukes","powers" : ["Radiation resistance","Turning tiny","Radiation blast"]},{"name" : "Madame Uppercut","age" : 39,"secretIdentity" : "Jane Wilson","powers" : ["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name" : "Eternal Flame","age" : 1000000,"secretIdentity" : "Unknown","powers" : ["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]
}
使用
.
或[]
访问对象内的数据访问对象中的对象,只需简单地链式访问(通过属性名和数组索引)。
superHeroes["members"][1]["powers"][2]//首先有变量名 superHeroes,储存对象 。
//在对象中我们想访问 members 属性,所以我们使用 ["members"]。
//members 包含有对象数组,我们想要访问第二个元素,所以我们使用[1]。
//在对象内,我们想访问 powers 属性,所以我们使用 ["powers"]。
//powers 属性是一个包含英雄技能的数组。我们想要第三个,所以我们使用[2]。
JSON 数组
前面我们已经说过,”我们已经可以推测出 JSON 对象就是基于 JavaScript 对象,而且这几乎是正确的“——我们说几乎正确的原因是数组对象也是一种合法的 JSON 对象,例如:
[{"name" : "Molecule Man","age" : 29,"secretIdentity" : "Dan Jukes","powers" : ["Radiation resistance","Turning tiny","Radiation blast"]},{"name" : "Madame Uppercut","age" : 39,"secretIdentity" : "Jane Wilson","powers" : ["Million tonne punch","Damage resistance","Superhuman reflexes"]}
]
上面是完全合法的 JSON。您只需要通过数组索引就可以访问数组元素,如[0]["powers"][0]
。
其他注意事项
- JSON 是一种纯数据格式,它只包含属性,没有方法。
- JSON要求在字符串和属性名称周围使用双引号。 单引号无效。
- 甚至一个错位的逗号或分号就可以导致 JSON 文件出错。您应该小心的检查您想使用的数据(虽然计算机生成的 JSON 很少出错,只要生成程序正常工作)。您可以通过像 JSONLint 的应用程序来检验 JSON。
- JSON 可以将任何标准合法的 JSON 数据格式化保存,不只是数组和对象。比如,一个单一的字符串或者数字可以是合法的JSON 对象。虽然不是特别有用处……
- 与 JavaScript 代码中对象属性可以不加引号不同,JSON 中只有带引号的字符串可以用作属性。
对象和文本间的转换
接收到一些 字符串作为 JSON 数据,然后我们想要将它转换为对象。当我们想要发送 JSON 数据作为信息,我们将需要转换它为字符串,我们经常需要正确的转换数据,幸运的是,这两个问题在web环境中是那么普遍以至于浏览器拥有一个内建的 JSON,包含以下两个方法。
parse()
: 以文本字符串形式接受JSON对象作为参数,并返回相应的对象。
stringify()
: 接收一个对象作为参数,返回一个对应的JSON字符串。
const json = { x: 5, y: 6 };
const str = JSON.stringify(json);
console.log(str); //"{"x":5,"y":6}"const obj = JSON.parse(str);
console.log(obj); //Object { x: 5, y: 6 }
参考:
JSON(JavaScript Object Notation)
使用JSON
理解 JSON 的数据储存工作原理及对象和文本间的转换方法相关推荐
- Elasticsearch 查询数据的工作原理是什么?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:8rr.co/GsAa 面试题 ES 写入数据的工作原理是什 ...
- ES 查询数据的工作原理是什么?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/GsAa 面试题 ...
- es 删除数据_es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?...
面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基 ...
- elasticsearch 工作原理_【154期】面试官:你能说说 Elasticsearch 查询数据的工作原理是什么吗?...
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...
- 轻松了解面试官心理!ElasticSearch写入数据的工作原理是什么? | 技术头条
戳蓝字"CSDN云计算"关注我们哦! 作者:手留余香 转自: Java架构沉思录 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene ...
- ElasticSearch面试 - es 写入数据的工作原理是什么啊?
ElasticSearch面试 - es 写入数据的工作原理是什么啊? 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? ...
- 深入浅出地理解STM32中的定时器工作原理
深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...
- 深入理解Kotlin协程suspend工作原理(初学者也能看得懂)
1. 概述 挂起函数是Kotlin协程最重要的一个特性,所有其他概念都建立在它的基础上.所以我们需要深入了解它的工作原理. 挂起协程意味着在中间停止它.这类似于玩游戏,当我们想暂停游戏时,可以先存档, ...
- 论宏观和微观角度理解二极管和三极管的工作原理
首先介绍有导体.绝缘体和半导体的概念. 对于生活中常见的材料如钢和铁材料,它们是导体,从微观角度来说,材料内部的电子在不同的层级上所有的能量是不同的,一般除了最高级的能级之外,在导体中,它的电子会保持 ...
最新文章
- python tar.gz格式压缩、解压
- 《预训练周刊》第40期: 量子预训练、千层BERT与GPT
- 7 Papers Radios | Transformer自动debug;AI合成舞蹈落地应用
- pyqt5知识:如何接受密码输入?
- lecture 3 qkine- start with connections
- 面试官 | SpringBoot 中如何实现异步请求和异步调用?
- Java中Comparable和Comparator接口的区别
- shiro 同时实现url和按钮的拦截_Shiro权限管理框架(一):Shiro的基本使用
- CSS 7阶层叠水平
- python模块之junos-eznc
- 2020年全球区块链专利排行榜TOP100,中国52家公司上榜
- VC编程--玩转控件(Windows编程简介)
- xss.haozi.me
- exec函数用法总结
- 微信公众平台版面设计需要服务器,公众号版面设计,微信公众号中排版怎么弄...
- 干货|以产品要素设计解读线上小微信贷
- 基于Spring Boot框架的驾校学员信息管理系统
- selenium webdriver使用
- Session的工作原理
- JAVA开发与运维(JavaWeb测试环境搭建)
热门文章
- SpringMVC第二讲——传参、修改端口、请求转发、重定向、跨服务器文件上传
- PHP实现按姓名首字母排序
- Unity Editor下判断图片是否带alpha通道
- 【计算机毕业设计】81.音乐网站源码
- 解决Cannot find module ‘./App.vue‘ or its corresponding type declaration 的问题
- EBS Form不能登录: Illegal argument for colorScheme applet parameter
- 双闭环可逆直流脉宽pwm调速系统设计及matlab仿真验证_,双闭环可逆直流脉宽PWM调速系统设计及MATLAB仿真验证-课程设计.doc...
- WINDOWS在电脑中起什么样的作用
- ipad android tv,先河私有云持续大动作:继iPad/Android TV端/系统分享功能后,还有新玩法?...
- Frameset打印frame的问题(downmoon)