什么是JSON
JSON:JavaScript Object Notation
(翻译就是JavaScript 对象表示法),是一种表示对象的方法。
JSON 是存储和交换文本信息的语法,类似 XML。但是JSON 比 XML 更小、更快,更易解析。此外JSON也易于人阅读和编写。而且主流的编程语言像C、Python、C++、Java、PHP、Go等编程语言都支持 JSON。单片机中有时候也会使用JSON来传输数据(物联网与云平台)那么今天就来深入研究一下JSON语言的语法跟特点。
JSON数据长什么样
这里我以心知天气的API返回数据为例进行说明,心知天气是一个天气数据的服务商,可以通过网络调用API接口,一般是GET请求,可以获取指定城市的天气实况。付费用户可获取全部数据,免费用户只返回天气现象文字、代码和气温 3 项数据。下面列出一个返回数据的案例。
c
{
"results": [
{
"location": {
"id": "C23NB62W20TF",
"name": "西雅图",
"country": "US",
"path": "西雅图,华盛顿州,美国",
"timezone": "America/Los_Angeles",
"timezone_offset": "-07:00"
},
"now": {
"text": "多云", //天气现象文字
"code": "4", //天气现象代码
"temperature": "14", //温度,单位为c摄氏度或f华氏度
"feels_like": "14", //体感温度,单位为c摄氏度或f华氏度,暂不支持国外城市。
"pressure": "1018", //气压,单位为mb百帕或in英寸
"humidity": "76", //相对湿度,0~100,单位为百分比
"visibility": "16.09", //能见度,单位为km公里或mi英里
"wind_direction": "西北", //风向文字
"wind_direction_degree": "340", //风向角度,范围0~360,0为正北,90为正东,180为正南,270为正西
"wind_speed": "8.05", //风速,单位为km/h公里每小时或mph英里每小时
"wind_scale": "2", //风力等级,请参考:http://baike.baidu.com/view/465076.htm
"clouds": "90", //云量,单位%,范围0~100,天空被云覆盖的百分比 #目前不支持中国城市#
"dew_point": "-12" //露点温度,请参考:http://baike.baidu.com/view/118348.htm #目前数据缺失中#
},
"last_update": "2015-09-25T22:45:00-07:00" //数据更新时间(该城市的本地时间)
}
]
}
获取心知天气数据API
api.seniverse.com/v3/weather/now.json?key=你的私钥&location=shenzhen&language=zh-Hans&unit=c
在浏览器输入这个链接可以返回这个数据结果JSON类型
c
{
"results": [
{
"location": {
"id": "WS10730EM8EV",
"name": "深圳",
"country": "CN",
"path": "深圳,深圳,广东,中国",
"timezone": "Asia/Shanghai",
"timezone_offset": "+08:00"
},
"now": {
"text": "阴",
"code": "9",
"temperature": "26"
},
"last_update": "2024-06-08T10:22:10+08:00"
}
]
}
JSON数据的特点
- JSON用一对大括号{}表示对象
- JSON用一对中括号[]表示数组
- JSON用一个逗号,来分割数据
- JSON用一个名称:键值对表示
- JSON的数组中可以有多个对象
JSON中的值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array),而且它们是可以嵌套。
c
字符串JSON格式
{"text": "阴"}
数值JSON格式
{ "age":30.00 }
布尔值JSON格式
{ "flag":true }
NULL值JSON格式
{ "runoob":null }
数组JSON格式
[
{key1:value1-1 ,key2:value1-2 },
{key1:value1-1 ,key2:value1-2 },
]
我们可以分析这个JSON数据。以下是这个JSON数据的结构及其内容解析:
json
{
"results": [
{
"location": {
"id": "WS10730EM8EV",
"name": "深圳",
"country": "CN",
"path": "深圳,深圳,广东,中国",
"timezone": "Asia/Shanghai",
"timezone_offset": "+08:00"
},
"now": {
"text": "阴",
"code": "9",
"temperature": "27"
},
"last_update": "2024-06-11T22:00:15+08:00"
}
]
}
数据结构解析
-
根对象:
results
: 一个包含天气信息的数组。
-
results 数组中的对象:
- 每个对象代表一个地点的天气信息。
-
location 对象:
id
: 地点的唯一标识符,例如"WS10730EM8EV"
。name
: 地点名称,例如"深圳"
。country
: 国家代码,例如"CN"
(中国)。path
: 详细位置路径,例如"深圳,深圳,广东,中国"
。timezone
: 时区,例如"Asia/Shanghai"
。timezone_offset
: 时区偏移,例如"+08:00"
。
-
now 对象:
text
: 当前天气状况描述,例如"阴"
(Overcast)。code
: 天气状况代码,例如"9"
(通常每个天气状况对应一个代码)。temperature
: 当前温度,例如"27"
摄氏度。
-
last_update 字段:
last_update
: 最后更新时间,例如"2024-06-11T22:00:15+08:00"
。
数据内容解析
-
地点信息:
- 深圳,广东,中国,时区为亚洲/上海 (Asia/Shanghai),时区偏移为+08:00。
-
当前天气状况:
- 天气状况为阴天,温度为27摄氏度。
-
最后更新时间:
- 数据最后更新于2024年6月11日晚上10点(当地时间)。