关于JSON基础的总结
本文总结自百度百科
JSON 语法规则
- 数据在键值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 名称/值对
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
- "firstName":"John"
这很容易理解,等价于这条 JavaScript 语句:
- firstName="John"
JSON 值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
基础结构
基础示例
简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
名称 / 值对
- {"firstName":"Brett"}
这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:
- firstName=Brett
但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:
- {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
表示数组
- {
- "people":[
- {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
- {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
- {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
- ]
- }
这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
- {
- "programmers": [{
- "firstName": "Brett",
- "lastName": "McLaughlin",
- "email": "aaaa"
- }, {
- "firstName": "Jason",
- "lastName": "Hunter",
- "email": "bbbb"
- }, {
- "firstName": "Elliotte",
- "lastName": "Harold",
- "email": "cccc"
- }],
- "authors": [{
- "firstName": "Isaac",
- "lastName": "Asimov",
- "genre": "sciencefiction"
- }, {
- "firstName": "Tad",
- "lastName": "Williams",
- "genre": "fantasy"
- }, {
- "firstName": "Frank",
- "lastName": "Peretti",
- "genre": "christianfiction"
- }],
- "musicians": [{
- "firstName": "Eric",
- "lastName": "Clapton",
- "instrument": "guitar"
- }, {
- "firstName": "Sergei",
- "lastName": "Rachmaninoff",
- "instrument": "piano"
- }]
- }
格式应用
赋值给变量
- var people = {
- "programmers": [{
- "firstName": "Brett",
- "lastName": "McLaughlin",
- "email": "aaaa"
- }, {
- "firstName": "Jason",
- "lastName": "Hunter",
- "email": "bbbb"
- }, {
- "firstName": "Elliotte",
- "lastName": "Harold",
- "email": "cccc"
- }],
- "authors": [{
- "firstName": "Isaac",
- "lastName": "Asimov",
- "genre": "sciencefiction"
- }, {
- "firstName": "Tad",
- "lastName": "Williams",
- "genre": "fantasy"
- }, {
- "firstName": "Frank",
- "lastName": "Peretti",
- "genre": "christianfiction"
- }],
- "musicians": [{
- "firstName": "Eric",
- "lastName": "Clapton",
- "instrument": "guitar"
- }, {
- "firstName": "Sergei",
- "lastName": "Rachmaninoff",
- "instrument": "piano"
- }]
- };
这非常简单;people包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。
访问数据
- people.programmers[0].lastName;
注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。
- people.authors[1].genre // Value is "fantasy"
- people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one
- people.programmers[2].firstName // Value is "Elliotte"
利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。
修改数据
- people.musicians[1].lastName="Rachmaninov";
在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。
换回字符串
JSON嵌套格式
- {
- id: '100000',
- text: '廊坊银行总行',
- children: [
- {
- id: '110000',
- text: '廊坊分行',
- children: [
- {
- id: '113000',
- text: '廊坊银行开发区支行',
- leaf: true
- },
- {
- id: '112000',
- text: '廊坊银行解放道支行',
- children: [
- {
- id: '112200',
- text: '廊坊银行三大街支行',
- leaf: true
- },
- {
- id: '112100',
- text: '廊坊银行广阳道支行',
- leaf: true
- }
- ]
- },
- {
- id: '111000',
- text: '廊坊银行金光道支行',
- leaf: true
- }
- ]
- }
- ]
- }
XML格式和JSON格式对一份数据的表示:
XML:
- <?xml version="1.0" encoding="utf-8"?>
- <country>
- <name>中国</name>
- <province>
- <name>黑龙江</name>
- <cities>
- <city>哈尔滨</city>
- <city>大庆</city>
- </cities>
- </province>
- <province>
- <name>广东</name>
- <cities>
- <city>广州</city>
- <city>深圳</city>
- <city>珠海</city>
- </cities>
- </province>
- <province>
- <name>台湾</name>
- <cities>
- <city>台北</city>
- <city>高雄</city>
- </cities>
- </province>
- <province>
- <name>新疆</name>
- <cities>
- <city>乌鲁木齐</city>
- </cities>
- </province>
- </country>
JSON:
- {
- "name": "中国",
- "province": [{
- "name": "黑龙江",
- "cities": {
- "city": ["哈尔滨", "大庆"]
- }
- }, {
- "name": "广东",
- "cities": {
- "city": ["广州", "深圳", "珠海"]
- }
- }, {
- "name": "台湾",
- "cities": {
- "city": ["台北", "高雄"]
- }
- }, {
- "name": "新疆",
- "cities": {
- "city": ["乌鲁木齐"]
- }
- }]
- }
关于JSON基础的总结的更多相关文章
- json基础
1 xml缺点 用xml表示一个对象,数据存储效率低 <person> <firstName>Morra<firstName> <lastName>Do ...
- 【Java EE 学习 31】【JavaScript基础增强】【Ajax基础】【Json基础】
一.JavaScript基础增强 1.弹窗 (1)使用window对象的showModelDialog方法和showModelessDialog方法分别可以弹出模式窗口和非模式窗口,但是只能在IE中使 ...
- (转)JSON基础入门
原文地址:http://kb.cnblogs.com/page/43982/ JSON 基础简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松 ...
- JSON基础知识总结
JSON基础 一.JSON简介 JSON,全称“JavaScript Object Notation(JavaScript对象表示法)”,起源于JavaScript的对象和数组.JSON,说白了就是J ...
- json基础教程|理解Json
一. 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.这一期讨论一种有用的数据格式 JavaScript Object Notation(JSON),以及如何使用它更轻松地 ...
- json 基础
json格式 JSON格式:http://www.json.org/ python和JSON的关系请参考:http://docs.python.org/library/json.html JSON建构 ...
- JSON基础使用详解
JSON:JavaScript对象表示法 1.1 JSON说明 曾经一段时间,XML是互联网传递数据的统一标准,但是业界一直不乏质疑XML的人士,他们都认为XML过于繁琐,冗长:提取数据也过于麻烦 2 ...
- jQuery的几个应例题、JSON基础
1.下拉列表取值.赋值 (1)写个下拉列表,如下: <select id="sel"> <option value="山东">山东< ...
- JSON 基础解释.
JSON.(JavaScript Object Notation) JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本 ...
随机推荐
- ABP框架 - 缓存( 转)
出处:http://www.cnblogs.com/kid1412/p/5987083.html 文档目录 本节内容: 简介 ICacheManager ICache ITypedCache 配置 实 ...
- 动词的时态(Les temps du verbe )
在开始讲解直陈式现在时的主要用法之前,我们有必要先搞清楚两个基本概念:▶语式(mode):语式是动词表达动作的方式.一个动作,可以作为实在的事表达出来,也可以作为希望或单纯设想的事表达出来,法语动词共 ...
- vi 基本使用命令
说明:以下的例子中 xxx 表示在命令模式下输入 xxx 并回车以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车小括号中的命令表示相关命令在编辑模式或可视模式下输入的命令会另外注明 1 查 ...
- nlms_step_get
module nlms_step_get( rst , clk , nd , din01_i, din01_q, din02_i, din02_q, dou ...
- 测试setsockopt设置超时是否生效代码
// 测试setsockopt设置超时是否生效代码 #include <arpa/inet.h> #include <netinet/in.h> #include <st ...
- (线段树 区间查询)The Water Problem -- hdu -- 5443 (2015 ACM/ICPC Asia Regional Changchun Online)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 The Water Problem Time Limit: 1500/1000 MS (Java/ ...
- 作为CTO如何做技术升级
升级技术架构,先要革新观念,最后才是技术问题 升级技术架构,不仅仅是技术升级 说到升级架构,大家第一个都会想到,是不是对技术升级一下就可以了? 我认为不是,技术架构升级要求的是整个公司的升级. 技术架 ...
- MFC-CWinApp
概览 CWinApp为应用程序类, CWinApp由 CWinThread 派生而来 ,后者表示可能具有一个或多个线程的应用程序的主执行线程,基于框架生成的应用程序必须有且仅有一个从 CWinApp ...
- 转载:<context-param>与<init-param>的区别与作用
<context-param>的作用:web.xml的配置中<context-param>配置作用1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web ...
- 两种方式创建支持SSH服务的docker镜像
方法一:基于commit命令创建 1.首先,从docker的源中查看我们需要的镜像,本案例中使用Ubuntu作为基础镜像. # federico @ linux in ~ [16:57:38] $ s ...