简介
_JSON_是_JavaScript Object Notation_的缩写,是一种共享数据的格式。顾名思义,JSON派生于JavaScript编程语言,但它可用于许多语言,包括Python、Ruby、PHP和Java。Json的发音通常与名字jason
相似。
JSON也是可读的,轻量级的,提供了一个很好的XML替代品,并且需要更少的格式。本信息指南将讨论您可以在JSON文件中使用的数据以及此格式的一般结构和语法。
了解语法和结构
JSON单独使用.json
扩展名,当它以另一种文件格式定义时(如.html
),它可以作为JSON字符串出现在引号中,也可以是赋值给变量的对象。此格式在Web服务器和客户端或浏览器之间传输。
A_JSON OBJECT_是一种键值数据格式,通常用大括号表示。在使用JSON时,您可能会遇到`.json‘文件中的JSON对象,但它们也可以作为JSON对象或字符串存在于程序上下文中。
下面是一个JSON对象的示例:
1{
2 "first_name" : "Sammy",
3 "last_name" : "Shark",
4 "location" : "Ocean",
5 "online" : true,
6 "followers" : 987
7}
尽管这是一个简短的示例,并且JSON可能有很多行,但这表明格式通常是用两个大括号(或大括号)设置的,两端用{}
表示,并用键-值对填充其间的空格。JSON中使用的大多数数据最终都被封装在JSON对象中。
_key-value对_之间有冒号,如key`:`Value
。每个键值对用逗号分隔,因此JSON中间的列表如下:key`:`value`,`key`:`value`,`key`:`value
。在上例中,第一个键值对为first_name`:`sammy
。
Json_key_位于冒号的左侧。它们需要用双引号括起来,如key
,并且可以是任何有效的字符串。在每个对象中,键需要是唯一的。这些键字符串可以包括空格,如first name
,但这会使您在编程时更难访问,因此最好使用下划线,如first_name
。
JSON_VALUES_位于冒号的右侧。在粒度级别,这些数据类型需要是以下六种数据类型之一:
- 字符串
- 数字
- 对象
- 数组
- 布尔值(真或假)
- 空
在更广泛的层面上,值也可以由JSON对象或数组的复杂数据类型组成,这将在下一节中讨论。
作为值传递到JSON中的每种数据类型都将维护其自己的语法,这意味着字符串将用引号括起来,但数字不会。
对于.json
文件,通常会将格式扩展到多行,但JSON也可以全部写在一行中,如下例所示:
1{ "first_name" : "Sammy", "last_name": "Shark", "online" : true, }
这在另一种文件类型中或遇到JSON字符串时更为常见。
在多行中编写JSON格式通常会使其更具可读性,尤其是在处理大型数据集时。因为JSON忽略了元素之间的空格,所以您可以空出冒号和键值对,以使数据更具人类可读性:
1{
2 "first_name" : "Sammy",
3 "last_name" : "Shark",
4 "online" : true
5}
重要的是要记住,尽管它们看起来很相似,但JSON对象与_JavaScript对象的格式不同,因此尽管您可以在Java对象中使用函数,但不能在JSON中将它们用作值。JSON最重要的属性是它可以很容易地在编程语言之间以一种所有参与语言都可以使用的格式进行传输。相反,只能通过JavaScript编程语言直接使用JavaScript对象。
对于由嵌套对象和数组组成的层次结构,JSON可能会变得越来越复杂。接下来,您将更多地了解这些复杂的结构。
在JSON中处理复杂类型
除了嵌套数组之外,JSON还可以以JSON格式存储嵌套对象。这些对象和数组将作为分配给键的值传递,也可能由键-值对组成。
嵌套对象
在下面的users.json
文件中,对于四个用户(`)中的每一个,都有一个嵌套的JSON对象作为每个用户的值传递,它自己的嵌套关键字用户名
和Location
与每个用户相关。以下代码块中的每个用户条目都是嵌套JSON对象的示例:
1[label users.json]
2{
3 "sammy" : {
4 "username" : "SammyShark",
5 "location" : "Indian Ocean",
6 "online" : true,
7 "followers" : 987
8 },
9 "jesse" : {
10 "username" : "JesseOctopus",
11 "location" : "Pacific Ocean",
12 "online" : false,
13 "followers" : 432
14 },
15 "drew" : {
16 "username" : "DrewSquid",
17 "location" : "Atlantic Ocean",
18 "online" : false,
19 "followers" : 321
20 },
21 "jamie" : {
22 "username" : "JamieMantisShrimp",
23 "location" : "Pacific Ocean",
24 "online" : true,
25 "followers" : 654
26 }
27}
在本例中,始终使用花括号来形成一个嵌套的JSON对象,其中包含四个用户中每个用户的关联用户名和位置数据。与任何其他值一样,在使用对象时,使用逗号来分隔元素。
嵌套阵列
通过使用作为值传递的JavaScript数组,还可以在JSON格式中嵌套数据。JavaScript在其数组类型的两端使用方括号[]
。数组是有序集合,可以包含不同数据类型的值。
例如,您可以在处理大量可组合在一起的数据时使用数组,例如,当有多个网站和社交媒体配置文件与单个用户相关联时。
利用第一嵌套数组,可以如下表示Sammy
的用户简档:
1[label user_profile.json]
2{
3 "first_name" : "Sammy",
4 "last_name" : "Shark",
5 "location" : "Ocean",
6 "websites" : [
7 {
8 "description" : "work",
9 "URL" : "https://www.digitalocean.com/"
10 },
11 {
12 "desciption" : "tutorials",
13 "URL" : "https://andsky.com/tech/tutorials"
14 }
15 ],
16 "social_media" : [
17 {
18 "description" : "twitter",
19 "link" : "https://twitter.com/digitalocean"
20 },
21 {
22 "description" : "facebook",
23 "link" : "https://www.facebook.com/DigitalOceanCloudHosting"
24 },
25 {
26 "description" : "github",
27 "link" : "https://github.com/digitalocean"
28 }
29 ]
30}
分别使用数组来嵌套属于Sammy的两个网站链接和三个社交媒体个人资料链接的信息的网站
键和Social_media
键。由于使用了方括号,您可以确定这些是数组。
在JSON格式中使用嵌套允许您处理更复杂和层次化的数据。
JSON与XML对比
_XML_或e_X_tensible _M_arkup _L_语言,是一种存储可访问数据的方法,这些数据可以被人类和机器读取。XML格式可用于许多编程语言。
在许多方面,XML类似于JSON,但它需要更多的文本,这使得它读写起来更长、更耗时。还必须使用XML解析器来解析XML,但是可以使用标准函数来解析JSON。此外,与JSON不同,XML不能使用数组。
下面是一个XML格式的示例:
1[label users.xml]
2<users>
3 <user>
4 <username>SammyShark</username> <location>Indian Ocean</location>
5 </user>
6 <user>
7 <username>JesseOctopus</username> <location>Pacific Ocean</location>
8 </user>
9 <user>
10 <username>DrewSquir</username> <location>Atlantic Ocean</location>
11 </user>
12 <user>
13 <username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
14 </user>
15</users>
现在,比较在JSON中呈现的相同数据:
1[label users.json]
2{"users": [
3 {"username" : "SammyShark", "location" : "Indian Ocean"},
4 {"username" : "JesseOctopus", "location" : "Pacific Ocean"},
5 {"username" : "DrewSquid", "location" : "Atlantic Ocean"},
6 {"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
7] }
JSON更加紧凑,不需要结束标记,而XML需要。此外,XML没有像JSON的这个例子那样使用数组(通过使用方括号可以看出这一点)。
如果您熟悉HTML,就会注意到XML在标记的使用上非常相似。虽然JSON比XML更精简、更少冗长,并且在许多情况下都可以快速使用,包括AJAX应用程序,但是在决定使用什么数据结构之前,您首先希望了解您正在处理的项目的类型。
结论
JSON是一种轻量级格式,使您能够共享、存储和使用数据。作为一种格式,JSON在API](https://andsky.com/tech/tutorials/how-to-create-a-twitter-app).中得到了越来越多的支持,包括[推特APIJSON也是在JavaScript中使用的一种自然格式,并且有许多可用于各种流行编程语言的实现。您可以在[介绍JSON](http://www.json.org/))
站点上阅读完整的语言支持。
因为您可能不会创建自己的`.json‘文件,而是从其他来源获取它们,所以重要的是少考虑JSON的结构,而是更多地考虑如何在您的程序中最好地使用JSON。例如,您可以使用开源工具Mr Data Converter.]将电子表格程序中的csv或制表符分隔的数据转换为JSON您还可以使用知识共享许可的UTILITIES-ONLINe.INFO site.]将XML转换为JSON,反之亦然
最后,在将其他数据类型转换为JSON或创建您自己的数据类型时,您可以使用JSONLint,)验证您的JSON,并使用JSFdle.)在Web开发上下文中测试您的JSON