JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等),这些特性使JSON成为理想的数据交换语言。
JSON的基本结构有两种:对象(object)和数组(array),对象是由键值对组成的无序集合,键是字符串,值可以是任意数据类型,数组是由有序的值组成的集合,每个值可以是任意数据类型,JSON还有一些特殊字符和语法规则,下面我们来详细介绍。
1、对象
对象的表示方法是用大括号{}包围键值对,键值对之间用逗号分隔,键值对中的键必须是字符串,值可以是任意数据类型。
{ "name": "张三", "age": 30, "isStudent": false, "courses": ["语文", "数学", "英语"] }
2、数组
数组的表示方法是用中括号[]包围值,值之间用逗号分隔。
[ "apple", "banana", "orange" ]
3、嵌套结构
JSON可以表示复杂的嵌套结构,例如对象中包含数组,或者数组中包含对象。
{ "students": [ { "name": "张三", "age": 30, "courses": ["语文", "数学", "英语"] }, { "name": "李四", "age": 28, "courses": ["语文", "数学", "物理"] } ] }
4、特殊字符和语法规则
JSON有一些特殊字符和语法规则需要注意:
- 双引号:JSON中的字符串必须用双引号括起来,如果字符串本身包含双引号,可以使用反斜杠进行转义。"hello \"world\""
。
- 斜杠:JSON中的斜杠用于表示转义字符,如果需要表示一个实际的斜杠字符,可以使用两个斜杠。"path/to/file"
。
- 空格和缩进:JSON中的空格和缩进不影响数据的解析和生成,但是为了提高可读性,通常建议使用一致的空格和缩进风格,大多数JSON库和工具都支持自动格式化输出。
- NULL:JSON中的NULL表示空值或者缺失值,表示方法是一个单独的关键字null
。"score": null
,注意,JSON不支持其他编程语言中的空引用(如Java的null或Python的None)。
- 布尔值:JSON中的布尔值表示为关键字true
或false
。"isStudent": true
,注意,布尔值不区分大小写。
- 数字:JSON中的数字可以是整数、浮点数或者科学计数法表示的数值。123
、3.14
、1.23e-4
,注意,NaN、Infinity和-Infinity在JSON中分别表示为NaN
、Infinity
和-Infinity
。
- 日期和时间:JSON中的日期和时间可以使用ISO 8601格式表示。"birthday": "1990-01-01T00:00:00Z"
,注意,日期和时间的格式必须是有效的ISO 8601格式,否则可能导致解析错误。
- Unicode字符:JSON支持Unicode字符集,可以直接表示各种语言的字符。"name": "张三"
、"greeting": "\u4f60\u597d"
,注意,Unicode字符不需要转义。
5、JSON解析和生成库
许多编程语言都有现成的JSON解析和生成库,可以方便地处理JSON数据,以下是一些常见编程语言的JSON库示例:
- JavaScript:原生支持JSON,可以使用内置的JSON.parse()
和JSON.stringify()
方法进行解析和生成,还有许多第三方库(如lodash、underscore等)提供了更丰富的功能。
- Python:原生支持JSON,可以使用内置的json.loads()
和json.dumps()
方法进行解析和生成,还有许多第三方库(如simplejson、demjson等)提供了更丰富的功能。
- Java:原生支持JSON,可以使用内置的org.json.*
包进行解析和生成,还有许多第三方库(如Gson、Jackson等)提供了更丰富的功能。
- PHP:原生支持JSON,可以使用内置的json_decode()
和json_encode()
方法进行解析和生成,还有许多第三方库(如php-json、symfony/json等)提供了更丰富的功能。