项目往期连载文章传送门:
【平头哥RVB2601创意应用开发】 RVB2601之KV组件介绍和使用
【平头哥RVB2601创意应用开发】 RVB2601之OLED-SSD1306移植介绍和使用
一. cJSON介绍
1.什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。可以在任意标记之间添加空白。
1)JSON文件内容基于两种结构:
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地址:https://github.com/DaveGamble/cJSON.git
二.cJSON移植和解析天气信息
cJSON的移植
其实cJSON的移植很简单,只需要把从github仓库下载的源码中的“cJSON.c”和“cJSON.h”拷贝到工程文件目录中,就完成了移植。
用cJSON解析天气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,参考官方文档
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请求的文章,给大家开个路,学习怎么获取天气数据。
你可以理解为,在使用到json的地方,cJSON库基本上就会用到;其实解析json,不止cJSON这一种开源库,还有其他的一些,只是可能网上cJSON用的比较多,大家也都习惯了,所有我才用cJSON写的,目的为了通用性,大家可以照着写出来
感谢推荐,这个可以移动keil等其他的地方全用吗?
引用: lugl4313820 发表于 2022-6-1 10:41 感谢推荐,这个可以移动keil等其他的地方全用吗?
可以的,Keil只是IDE,和官方提供的那个IDE软件都是一回事,是提供编写代码和编译代码的工具。cJSON就是一个用c写的轻量级别的json解析库,可以简单理解为,只要用到c的地方,都可以使用。
引用: 小默叔叔 发表于 2022-6-2 14:50 可以的,Keil只是IDE,和官方提供的那个IDE软件都是一回事,是提供编写代码和编译代码的工具。cJSON就是 ...
多谢多谢!我到时试试用到其他的地方看看。