初出茅庐的小李博客之JSON格式介绍

什么是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"
        }
    ]
}

数据结构解析

  1. 根对象:

    • results: 一个包含天气信息的数组。
  2. results 数组中的对象:

    • 每个对象代表一个地点的天气信息。
  3. location 对象:

    • id: 地点的唯一标识符,例如 "WS10730EM8EV"
    • name: 地点名称,例如 "深圳"
    • country: 国家代码,例如 "CN" (中国)。
    • path: 详细位置路径,例如 "深圳,深圳,广东,中国"
    • timezone: 时区,例如 "Asia/Shanghai"
    • timezone_offset: 时区偏移,例如 "+08:00"
  4. now 对象:

    • text: 当前天气状况描述,例如 "阴" (Overcast)。
    • code: 天气状况代码,例如 "9" (通常每个天气状况对应一个代码)。
    • temperature: 当前温度,例如 "27" 摄氏度。
  5. last_update 字段:

    • last_update: 最后更新时间,例如 "2024-06-11T22:00:15+08:00"

数据内容解析

  • 地点信息:

    • 深圳,广东,中国,时区为亚洲/上海 (Asia/Shanghai),时区偏移为+08:00。
  • 当前天气状况:

    • 天气状况为阴天,温度为27摄氏度。
  • 最后更新时间:

    • 数据最后更新于2024年6月11日晚上10点(当地时间)。
相关推荐
小林熬夜学编程1 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
Jackey_Song_Odd2 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
A懿轩A3 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
半盏茶香3 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
字节高级特工4 小时前
【C++】深入剖析默认成员函数3:拷贝构造函数
c语言·c++
计算机学长大白5 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言
yutian06068 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
XH华10 小时前
初识C语言之二维数组(下)
c语言·算法
析木不会编程11 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
Uu_05kkq13 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法