什么是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 项数据。下面列出一个返回数据的案例。
{"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类型
{"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),而且它们是可以嵌套。
字符串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数据的结构及其内容解析:
{"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点(当地时间)。