JSON(JavaScript Object Notation)是一种基于文本的格式,用于存储和传输结构化数据。
尽管它起源于 JavaScript 语言,但它被认为是与语言无关的:几乎适用于任何编程语言。JSON 的语法轻量,允许你轻松地存储和传输从数字、字符串到数组、对象等各种数据结构。你还可以通过将数组相互嵌套来创建更复杂的数据结构。
基本语法和结构
JSON 文本可以基于以下两种结构之一构建:
-
一组键值对(类似关联数组 / 字典);
-
一个有序的值集合(数组或列表)。
JSON 对象使用花括号 {}
表示,键值对之间使用逗号 ,
分隔,而每一对键和值之间使用冒号 :
分隔。例如:
{
"first_name": "Sophie",
"last_name": "Goodwin",
"age": 34
}
代码解释:
在这个例子中,我们看到了一个用户的数据,采用 JSON 格式表示。
-
键(如
"first_name"
)必须是字符串; -
值可以是以下七种类型之一,包括另一个对象或数组。
注意: 最后一组键值对后面不要加逗号(,
),否则可能导致解析错误。
数组示例
数组中的值也可以是任意类型,包括另一个数组或对象。例如:
["night", "street", false, [345, 23, 8, "juice"], "fruit"]
代码解释:
这个 JSON 数组包含字符串、布尔值、嵌套数组和其他值。在实际应用中,数组通常包含类型相似的元素。
注意: JSON 不支持注释。
嵌套对象
JSON 是一种非常灵活的格式。你可以将对象作为属性嵌套在其他对象中,例如:
{
"persons": [
{
"firstName": "Whitney",
"lastName": "Byrd",
"age": 20
},
{
"firstName": "Eugene",
"lastName": "Lang",
"age": 26
},
{
"firstName": "Sophie",
"lastName": "Goodwin",
"age": 34
}
]
}
代码解释:
这个数据结构包含一个 persons
数组,数组中的每一项是一个包含个人信息的对象。这种结构类似一棵树(树形结构)。
嵌套的对象是相互独立的,可以有不同的属性:
{
"persons": [
{
"firstName": "Whitney",
"age": 20
},
{
"firstName": "Eugene",
"lastName": "Lang"
}
]
}
代码解释:
虽然这些对象都在 persons
数组中,但它们的属性可以不完全相同。但在实际开发中,对象结构通常是统一的。
camelCase vs snake_case
如果你认真阅读了前面的 JSON 示例,你可能会产生一个疑问:JSON 中复合单词(多个单词组合的键)应该使用哪种命名风格?
-
camelCase(驼峰式): 单词之间没有分隔符,每个单词(除了第一个)首字母大写,例如:
firstName
。这种命名风格得名于中间的大写字母像骆驼的驼峰。
-
snake_case(蛇形命名法): 单词之间用下划线
_
分隔,例如:first_name
。
选择哪种命名风格通常取决于你使用的编程语言和框架。两种风格都被 JSON 接受,但请不要在一个 JSON 文件中混用这两种风格。
JSON 的优点
JSON 在互联网上广泛应用于数据交换,主要得益于以下优势:
-
结构紧凑;
-
灵活性强;
-
可读性高,即使对非程序员也友好;
-
几乎所有编程语言都内置处理 JSON 的函数和库。
JSON 是网络上传输结构化数据的常用格式。当你将数据序列化为 JSON 时,可以轻松地反序列化回来,不会丢失任何信息。JSON 相比纯文本的最大优势是:它允许通过嵌套和键值对来描述对象之间的关系。
你访问的大多数网站,很可能都在后台使用了 JSON。
此外,JSON 还常被用作数据存储格式,以及各种程序的配置文件格式。
总结
现在,你已经了解了 JSON 的基本结构与优势。JSON 简单易学,是一个在应用之间传输数据的强大工具。在实际工作中,你通常不需要手动编写 JSON 文件,而是从其他数据源中获取。但如果你想保存数据文件,只需将文件保存为以 .json
结尾的文件即可。