本文总结自百度百科

JSON 语法规则

JSON 语法是 JavaScript 对象表示语法的子集。
  • 数据在键值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:

"firstName":"John"

这很容易理解,等价于这条 JavaScript 语句:

firstName="John"

JSON 值

JSON 值可以是:
  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

基础结构

JSON结构有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。
1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。

基础示例

简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

名称 / 值对

按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":

{"firstName":"Brett"}

这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:

firstName=Brett

但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

表示数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在XML中,需要许多开始标记和结束标记;如果使用典型的名称 / 值对(就像在本系列前面文章中看到的那种名称 / 值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName这样的形式。
如果使用 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"}]
}

这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。
在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。

格式应用

掌握了 JSON 格式之后,在 JavaScript 中使用它就很简单了。JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

赋值给变量

例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

 1 var people = {
 2     "programmers": [{
 3         "firstName": "Brett",
 4         "lastName": "McLaughlin",
 5         "email": "aaaa"
 6     }, {
 7         "firstName": "Jason",
 8         "lastName": "Hunter",
 9         "email": "bbbb"
10     }, {
11         "firstName": "Elliotte",
12         "lastName": "Harold",
13         "email": "cccc"
14     }],
15     "authors": [{
16         "firstName": "Isaac",
17         "lastName": "Asimov",
18         "genre": "sciencefiction"
19     }, {
20         "firstName": "Tad",
21         "lastName": "Williams",
22         "genre": "fantasy"
23     }, {
24         "firstName": "Frank",
25         "lastName": "Peretti",
26         "genre": "christianfiction"
27     }],
28     "musicians": [{
29         "firstName": "Eric",
30         "lastName": "Clapton",
31         "instrument": "guitar"
32     }, {
33         "firstName": "Sergei",
34         "lastName": "Rachmaninoff",
35         "instrument": "piano"
36     }]
37 };

这非常简单;people包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。

访问数据

尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

people.programmers[0].lastName;

注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。

下面是使用同一变量的几个示例。

1 people.authors[1].genre  // Value is "fantasy"
2 people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one
3 people.programmers[2].firstName // Value is "Elliotte"

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

修改数据

正如可以用点号和方括号访问数据,也可以按照同样的方式轻松地修改数据:

people.musicians[1].lastName="Rachmaninov";

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

换回字符串

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。

JSON嵌套格式

许多JavaScript树形控件使用JSON嵌套格式描述树形结构,如下所示:

 1 {
 2   id: '100000',
 3   text: '廊坊银行总行',
 4   children: [
 5     {
 6       id: '110000',
 7       text: '廊坊分行',
 8       children: [
 9         {
10           id: '113000',
11           text: '廊坊银行开发区支行',
12           leaf: true
13         },
14         {
15           id: '112000',
16           text: '廊坊银行解放道支行',
17           children: [
18             {
19               id: '112200',
20               text: '廊坊银行三大街支行',
21               leaf: true
22             },
23             {
24               id: '112100',
25               text: '廊坊银行广阳道支行',
26               leaf: true
27             }
28           ]
29         },
30         {
31           id: '111000',
32           text: '廊坊银行金光道支行',
33           leaf: true
34         }
35       ]
36     }
37   ]
38 }  

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": ["乌鲁木齐"]}}]
}

编码的可读性,xml有明显的优势,毕竟人类的语言更贴近这样的说明结构。json读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。
编码的手写难度来说,xml还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而xml却包含很多重复的标记字符。

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5777342.html,如需转载请自行联系原作者

关于JSON基础的总结相关推荐

  1. 【ESP32_8266_WiFi (九)】JSON基础

    文章目录 JSON基础 1 JSON概念 2 JSON语法规则要点 3 JSON数据 3.1 JSON数字数据示例 3.2 JSON字符串数据示例 3.3 JSON逻辑值数据示例 3.4 JSON数组 ...

  2. 视频教程-JSON基础入门实战讲解-JavaScript

    JSON基础入门实战讲解 04年进入计算机行业.拥有6年net和php项目开发经验,8年java项目开发经验. 现前端全栈工程师,主攻产品设计,微信开发等. 黄菊华 ¥39.00 立即订阅 扫码下载「 ...

  3. JSON基础入门实战讲解在线视频课程-JSON 使用 JavaScript 语法

    因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON. 微信小程序交流群:111733917 | 微信小程序从0基础到就业的课程:http ...

  4. JSON基础入门实战讲解在线视频课程-JSON语法规则,json对象,json数组的定义和使用

    JSON 语法 微信小程序交流群:111733917 | 微信小程序从0基础到就业的课程:https://edu.csdn.net/topic/huangjuhua JSON 语法是 JavaScri ...

  5. 【java json基础】字符串转json json转字符串 json数组转换 【java基础知识】【实用】【一看就会】

    原文:[java json基础]字符串转json json转字符串 json数组转换 [java基础知识][实用][一看就会] 读书就是:从薄读厚,再从厚读薄的过程. 文比较长,各讲述如下: 若是新手 ...

  6. Educoder - JSON基础

    第1关:JSON篇:JSON基础知识 {"students":[{"name":"赵昊","age":15," ...

  7. JSON基础及Java的JSON工具类

    一.JSON基础 定义:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的 ...

  8. Ajax基础和Json基础

    AJAX: 1. 概念: ASynchronous JavaScript And XML 异步的JavaScript 和 XML1. 异步和同步:客户端和服务器端相互通信的基础上* 客户端必须等待服务 ...

  9. JSON 基础解释.

    JSON.(JavaScript Object Notation) JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本 ...

最新文章

  1. 赵胜男:数据思维,让我的科研和志愿服务动力十足 | 提升之路系列(十二)...
  2. SkipList 跳表
  3. 「Caffe」python版本caffe编译
  4. mysql自动插入的时间不对 差8小时
  5. 渤海船舶职业学院计算机应用公司,渤海船舶职业学院
  6. 低碳数据中心,因何而来?一文读懂如何利用超融合降碳
  7. Spring Data Redis实战之提供RedisTemplate
  8. NSTimer、CADisplayLink、GCD 三种定时器的用法 —— 昉
  9. 小米互联通信服务_时隔六年,小米NFC碰碰贴复活,碰一下自动亮灯、联网、投屏...
  10. XML和实体序列化和反序列化
  11. python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
  12. 如何读取二进制图片-.ashx一般处理程序
  13. 大数据第一季--java基础(day5)-徐培成-专题视频课程
  14. 人活着到底为了什么?
  15. Database of Fog
  16. U盘文件乱码怎么恢复正常
  17. Linux centos环境 安装谷歌浏览器
  18. 三位一体自荐信计算机专业,三位一体自荐信写法和范文
  19. 一年卖出20.4亿颗图像传感器,这家公司上市首日股价大涨145%
  20. IE浏览器代理服务器总是自动打开,取消勾选隔一会又会打开

热门文章

  1. Codeforces Round #324 (Div. 2) E. Anton and Ira 贪心
  2. 从分布式数据库的CAP特性说起
  3. UIAlertview改变按钮位置 大小
  4. AudioStreamer电话打进时崩溃
  5. linux下vsftp
  6. Chroot’ing users with openssh[强文推荐]
  7. SpringBoot+Mybatis配置Druid多数据源
  8. linux中使用scp远程拷贝文件及文件夹
  9. No package 'libpcre' found
  10. 软件之最大全电子书免费版