目标: 理解 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 的数据储存工作原理及对象和文本间的转换方法相关推荐

  1. Elasticsearch 查询数据的工作原理是什么?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:8rr.co/GsAa 面试题 ES 写入数据的工作原理是什 ...

  2. ES 查询数据的工作原理是什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/GsAa 面试题 ...

  3. es 删除数据_es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?...

    面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基 ...

  4. elasticsearch 工作原理_【154期】面试官:你能说说 Elasticsearch 查询数据的工作原理是什么吗?...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  5. 轻松了解面试官心理!ElasticSearch写入数据的工作原理是什么? | 技术头条

    戳蓝字"CSDN云计算"关注我们哦! 作者:手留余香 转自: Java架构沉思录 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene ...

  6. ElasticSearch面试 - es 写入数据的工作原理是什么啊?

    ElasticSearch面试 - es 写入数据的工作原理是什么啊? 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? ...

  7. 深入浅出地理解STM32中的定时器工作原理

    深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...

  8. 深入理解Kotlin协程suspend工作原理(初学者也能看得懂)

    1. 概述 挂起函数是Kotlin协程最重要的一个特性,所有其他概念都建立在它的基础上.所以我们需要深入了解它的工作原理. 挂起协程意味着在中间停止它.这类似于玩游戏,当我们想暂停游戏时,可以先存档, ...

  9. 论宏观和微观角度理解二极管和三极管的工作原理

    首先介绍有导体.绝缘体和半导体的概念. 对于生活中常见的材料如钢和铁材料,它们是导体,从微观角度来说,材料内部的电子在不同的层级上所有的能量是不同的,一般除了最高级的能级之外,在导体中,它的电子会保持 ...

最新文章

  1. python tar.gz格式压缩、解压
  2. 《预训练周刊》第40期: 量子预训练、千层BERT与GPT
  3. 7 Papers Radios | Transformer自动debug;AI合成舞蹈落地应用
  4. pyqt5知识:如何接受密码输入?
  5. lecture 3 qkine- start with connections
  6. 面试官 | SpringBoot 中如何实现异步请求和异步调用?
  7. Java中Comparable和Comparator接口的区别
  8. shiro 同时实现url和按钮的拦截_Shiro权限管理框架(一):Shiro的基本使用
  9. CSS 7阶层叠水平
  10. python模块之junos-eznc
  11. 2020年全球区块链专利排行榜TOP100,中国52家公司上榜
  12. VC编程--玩转控件(Windows编程简介)
  13. xss.haozi.me
  14. exec函数用法总结
  15. 微信公众平台版面设计需要服务器,公众号版面设计,微信公众号中排版怎么弄...
  16. 干货|以产品要素设计解读线上小微信贷
  17. 基于Spring Boot框架的驾校学员信息管理系统
  18. selenium webdriver使用
  19. Session的工作原理
  20. JAVA开发与运维(JavaWeb测试环境搭建)

热门文章

  1. SpringMVC第二讲——传参、修改端口、请求转发、重定向、跨服务器文件上传
  2. PHP实现按姓名首字母排序
  3. Unity Editor下判断图片是否带alpha通道
  4. 【计算机毕业设计】81.音乐网站源码
  5. 解决Cannot find module ‘./App.vue‘ or its corresponding type declaration 的问题
  6. EBS Form不能登录: Illegal argument for colorScheme applet parameter
  7. 双闭环可逆直流脉宽pwm调速系统设计及matlab仿真验证_,双闭环可逆直流脉宽PWM调速系统设计及MATLAB仿真验证-课程设计.doc...
  8. WINDOWS在电脑中起什么样的作用
  9. ipad android tv,先河私有云持续大动作:继iPad/Android TV端/系统分享功能后,还有新玩法?...
  10. Frameset打印frame的问题(downmoon)