目标: 理解 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秒转换成小时分钟秒_1小时3分59秒!双11天猫交易额超1000亿元
  2. 递归 累加和累乘
  3. 如何保护你的 Python 代码—— 定制 Python 解释器
  4. Cocos2d-x 在缓存创建图片
  5. yarn install 遇到的错误消息 - Error EPERM operation not permitted, open .yarnrc
  6. 【模块化开发】之 Webpack、Rollup、Parcel
  7. Windows 10 SSH 下载地址
  8. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_2 Mybatis的CRUD-保存操作
  9. 代码检测vc2013环境是否已经安装了
  10. 【通信原理 入坑之路】 —— 深入理解BPSK调制和解调的全过程及其Matlab实现
  11. dll文件懒加载_模块已加载,但对dllregisterServer的调用失败
  12. empty是什么意思 php,empty是什么意思中文翻译
  13. 电子计算机 划分发展阶段,电子计算机主要是以( )为标志来划分发展阶段的
  14. 关于 安装完MathType 后 Microsoft Word出现 53号错误 的解决方法
  15. python获取列表中某个元素个数_如何获取列表中的元素数?
  16. redhat安装配置Apache服务
  17. 扎克伯格----转自Jessica巨人
  18. 为什么要认证抖音蓝V?怎样申请抖音蓝V认证?
  19. BenchmarkSQL配置参数介绍
  20. 175Echarts - 象形柱图(Spirits)

热门文章

  1. SpringCloud微服务的熔断机制和熔断的意义?
  2. Excel 字符串拼接
  3. linux mysql使用教程_Linux 下MySQL的安装及基本使用
  4. 魔术方法php擎的区别,PHP基础知识之魔术方法
  5. 线速度、线加速度与参数化路径标量的速度、加速度之间的转换
  6. chatgpt智能提效职场办公-ppt怎么做流程图
  7. (赤焰剑C-SKY)2-HelloWorld
  8. python数组中逗号+冒号的使用
  9. RabbitMQ之Federation Exchange、Federation Queue、Shovel
  10. Surface SurfaceView SurfaceHolder