【平头哥RVB2601创意应用开发】 RVB2601之cJSON介绍和使用
[复制链接]
项目往期连载文章传送门:
【平头哥RVB2601创意应用开发】 RVB2601之KV组件介绍和使用
【平头哥RVB2601创意应用开发】 RVB2601之OLED-SSD1306移植介绍和使用
一. cJSON介绍
1.什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。可以在任意标记之间添加空白。
1)JSON文件内容基于两种结构:
- “名称/值”对的集合(name/value)。
- 值的有序列表(数组(array))。
2)JSON的基本数据类型:
**数值:**十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用e或者E表示指数部分。不能包含非数,如NaN。不区分整数与浮点数。JavaScript用双精度浮点数表示所有数值。
2.JSON用在哪里
简单的讲,就是当设备要联网通讯的时候,和云端的数据交互,承载数据的形式,大部分都是以json存在的,同时现有的公有云平台也都是如此。
或者可以作为设备的配置文件,在设备启动运行前,先从json的配置文件中,获取设备配置信息,会更加灵活有效。
3.什么是cJSON
cJSON是一个仅有一个.h文件,一个.c文件组成的JSON解析器,它是由纯C(ANSI C89)实现的,跨平台性较好。cJSON中有一个cJSON结构体。
是一个被广泛应用的c解析json的开源库 github地址:
二.cJSON移植和解析天气信息
-
cJSON的移植
其实cJSON的移植很简单,只需要把从github仓库下载的源码中的“cJSON.c”和“cJSON.h”拷贝到工程文件目录中,就完成了移植。
我这里放到了应用文件目录APP下面,其他c文件在使用cJSON API时候,需要包含其头文件
-
用cJSON解析天气json,获取例如时间和温度等数据
-
先贴一段要解析的 json 文本
这里我们可以看到,我们需要的温度和时间等数据,都在lives的数组里,且只有这一个,用到的主要API有两个:cJSON_GetArrayItem() 和 cJSON_GetObjectItem()
b. 直接贴代码吧,关于cJSON的API用法,可以参考cJSON源代码里 test目录下的测试代码
c.之前写的测试代码,打印了温度,简单贴个日志吧,最下面TEMP,是解析json之后的结果
三.天气API的获取方式
获取天气API这边我遇到了大坑,之前比较抵触去一些平台注册账号,然后获取可以请求天气的API,比如”http://wthrcdn.etouch.cn/weather_mini?city=西乡“,这个API,直接在postman上面跑的非常正常,但我用我的代码,一直出问题,当然我也知道这个API需要URL转换下,但还是不行。我也用python验证,发现还是如此。最后无奈,就随便注册了一个高德地图的账号,弄到一个获取天气的API,简单介绍下步骤,大家可以试试:
-
需要先在网站上注册账号:https://lbs.amap.com/?ref=https://console.amap.com/dev/key/app
-
然后创建服务 “web”,创建成功后,会看到key,这个就是关键
-
拿到获取天气的API,参考官方文档
https://lbs.amap.com/api/webservice/guide/api/weatherinfo/
d. 到此就获得了 获取天气的API,例如我的:
https://restapi.amap.com/v3/weather/weatherInfo?city=440306&key=xxxxxx
xxxx这个要填写自己的key
四.感悟
1.遇到的问题,就是获取天气API这个地方,本来想搞个不用注册的,谁知道走http get的问题很大,然后就搞了个高德地图的API。
2.cJSON的使用率很高,大家可以好好看看demo,用几次就会了,其实很简单,也不复杂。
3.后面会出一篇如何联网和使用HTTP GET请求的文章,给大家开个路,学习怎么获取天气数据。
|