1. JSON简介
1.1 什么是JSON
JSON(JavaScript Object Notation),即JS对象表示法,是一种通用的、轻量级的数据表示格式,常见于服务端和客户端的数据交互,也可用于数据保存。
因为与JavaScript中对象(object)的写法很类似,所以得名。
JSON不是一种编程语言,而是一种数据表示格式。
1.2 JSON的特点
-
便于阅读和编辑、体积小、解析快
相较于另一种使用比较广泛的数据表示格式
XML
,JSON
是比较容易阅读和编辑的,其体积相对较小,解析速度也快 -
独立于任何的编程语言
并不是名字中有JavaScript,就认为JSON只在JavaScipt中使用,JSON是与编程语言相互独立的一种数据表示格式,几乎所有的编程语言都支持JSON
-
网络传输中使用最高的一种数据格式
基于以上特点,很多服务器/客户端的应用中,都选择JSON作为数据格式
1.3 JSON解决了什么问题
思考一个实际的案例:基于服务器/客户端的应用中,假设需要进行数据传输,那么如何定义数据格式呢?一般服务端使用C++语言编写,构造了一个数据对象:
class Person
{
string name;
string gender;
int age;
}
这时,就面临以下两个问题:
- 客户端可以浏览器,可以是一个物联网设备,所以编程语言肯定是五花八门的,可以是JavaScript,也可以是等等,怎么将服务端数据传递给多种多样的客户端呢,不能直接发送
class Person
- 加入将来以后,需要使用Java或Go重写编写服务端,那就不能使用已经定义好的
class Person
了
所以,需要引入一种独立于编程语言的数据表示格式,JSON就解决了这些问题,服务端和客户端都不以某一种编程语言作为限制,而是围绕一个统一的数据格式
2. JSON数据格式
重申一遍:JSON是一种通用的数据表示格式,而不是一种编程语言。接下来学习JSON的数据表示法(个人认为不能称之为语法)。
2.1 JSON对象
JSON对象采用key/value(键值)对的形式:
{
"key1": value1,
"key2": value2,
"key3": value3,
}
-
key必须是字符串
-
value有7种类型
-
整型
-
浮点型
-
字符串型
-
布尔型
-
JSON对象型
一个JSON对象的value可以是另一个JSON对象,即JSON对象支持嵌套
-
JSON数组型
详见后文的JSON数组介绍,这里可以认为,JSON对象的value可以是一个数组
-
空类型
一种特殊类型,用
null
表示
-
-
key和value之间采用
:
分割 -
每个key/value之间采用
,
分割
// JSON对象1
{
"name": "Tom",
"age": 18,
"gender": "male",
"hobby": {
"hobby1": "basketball",
"hobby2": "football"
}
}
// JSON对象2
{
"year": 2024,
"description": "今年是2024年",
“leap year”: true,
“season”: ["spring", "summer", "autumn", "winter"],
}
2.2 JSON数组
JSON数组的格式定义:
[Item1, Item2, Item3, ... Itemn]
-
JSON的数组比较类似C/C++中的数组,元素之间用逗号分隔
-
JSON的数组元素可以是同种类型,也可以是不同的类型
-
JSON的数组支持嵌套
[1, 2, 3, 4]
["spring", "summer", "autumn", "winter"]
[1, 2.5, "hello", true, false, null]
// 数组嵌套
[
[1, 2, 3, 4],
["spring", "summer", "autumn", "winter"],
[1, 2.5, "hello", true, false, null]
]
// 数组中嵌套对象
[
{
"name": "Tom",
"age": 18,
"gender": "male"
},
{
"name": "Cherry",
"age": 30,
"gender": "female"
}
]
2.3 总结
-
JSON的数据类型共有7种:整型、浮点型、布尔型、字符串型、JSON对象、JSON数组、null空类型
-
JSON对象是key/value对,value可取7种类型
-
JSON数组的元素可取7种类型
-
JSON文件或者JSON字符串的根是可以是一个JSON对象,也可以是一个JSON数组,是JSON对象的居多
-
JSON对象和JSON数组两者可以说是一种你中有我,我中有你的关系,支持嵌套
{
"name": "China",
"info": {
"capital": "beijing",
"asian": true,
"founded": 1949
},
"provinces": [
{
"name": "shandong",
"capital": "jinan"
},
{
"name": "zhejiang",
"capital": "hangzhou"
}
]
}
3. JSON的在线解析
很多网站都提供JSON在线解析的功能,百度搜索JSON在线解析工具
:
我比较常用的是这个:JSON在线解析及格式化验证 - JSON中文网
4. 常用的JSCON库
C有 cJson
C++有jsoncpp
Java有 json-lib 、org-json等
Android有 Gson、FastJson等
解析及格式化验证 - JSON中文网](https://www.json.cn/jsononline/)
[外链图片转存中…(img-AFC4Atnc-1711005188155)]
4. 常用的JSCON库
C有 cJson
C++有jsoncpp
Java有 json-lib 、org-json等
Android有 Gson、FastJson等
Qt有QJson