390|5

17

帖子

0

资源

一粒金砂(中级)

【平头哥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移植和解析天气信息

  1. cJSON的移植

    其实cJSON的移植很简单,只需要把从github仓库下载的源码中的“cJSON.c”和“cJSON.h”拷贝到工程文件目录中,就完成了移植。

    我这里放到了应用文件目录APP下面,其他c文件在使用cJSON API时候,需要包含其头文件 image.png  

  2. 用cJSON解析天气json,获取例如时间和温度等数据

    1. 先贴一段要解析的 json 文本

      image.png  

    这里我们可以看到,我们需要的温度和时间等数据,都在lives的数组里,且只有这一个,用到的主要API有两个:cJSON_GetArrayItem() 和 cJSON_GetObjectItem()

    b. 直接贴代码吧,关于cJSON的API用法,可以参考cJSON源代码里 test目录下的测试代码

    image.png  

    c.之前写的测试代码,打印了温度,简单贴个日志吧,最下面TEMP,是解析json之后的结果

    image.png  

三.天气API的获取方式

获取天气API这边我遇到了大坑,之前比较抵触去一些平台注册账号,然后获取可以请求天气的API,比如”http://wthrcdn.etouch.cn/weather_mini?city=西乡“,这个API,直接在postman上面跑的非常正常,但我用我的代码,一直出问题,当然我也知道这个API需要URL转换下,但还是不行。我也用python验证,发现还是如此。最后无奈,就随便注册了一个高德地图的账号,弄到一个获取天气的API,简单介绍下步骤,大家可以试试:

  1. 需要先在网站上注册账号:https://lbs.amap.com/?ref=https://console.amap.com/dev/key/app

  2. 然后创建服务 “web”,创建成功后,会看到key,这个就是关键

    image.png  

  3. 拿到获取天气的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请求的文章,给大家开个路,学习怎么获取天气数据。


回复

6815

帖子

0

资源

五彩晶圆(中级)

这个.cJSON的使用率看来确实很高,收藏慢慢研究


回复

17

帖子

0

资源

一粒金砂(中级)

你可以理解为,在使用到json的地方,cJSON库基本上就会用到;其实解析json,不止cJSON这一种开源库,还有其他的一些,只是可能网上cJSON用的比较多,大家也都习惯了,所有我才用cJSON写的,目的为了通用性,大家可以照着写出来


回复

1454

帖子

3

资源

版主

感谢推荐,这个可以移动keil等其他的地方全用吗?

点评

可以的,Keil只是IDE,和官方提供的那个IDE软件都是一回事,是提供编写代码和编译代码的工具。cJSON就是一个用c写的轻量级别的json解析库,可以简单理解为,只要用到c的地方,都可以使用。  详情 回复 发表于 2022-6-2 14:50

回复

17

帖子

0

资源

一粒金砂(中级)

lugl4313820 发表于 2022-6-1 10:41 感谢推荐,这个可以移动keil等其他的地方全用吗?

可以的,Keil只是IDE,和官方提供的那个IDE软件都是一回事,是提供编写代码和编译代码的工具。cJSON就是一个用c写的轻量级别的json解析库,可以简单理解为,只要用到c的地方,都可以使用。

点评

多谢多谢!我到时试试用到其他的地方看看。  详情 回复 发表于 2022-6-2 16:10

回复

1454

帖子

3

资源

版主

小默叔叔 发表于 2022-6-2 14:50 可以的,Keil只是IDE,和官方提供的那个IDE软件都是一回事,是提供编写代码和编译代码的工具。cJSON就是 ...

多谢多谢!我到时试试用到其他的地方看看。


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    推荐帖子
    运放8坑

    引言 算放大器最初诞生时是用来作为各种模拟信号的运算,这个名字后来一直沿用至今,但是现在已经不仅仅是所谓的“运算”了,如 ...

    VAS5175A_VAS5176锂电充电管理IC应用参数

    VAS5175A_VAS5176锂电充电管理IC应用参数设置 1. 电感选择:电感功率是输入电流的1.5倍以上,最好2倍以上。 2. 限流电阻:12 ...

    RFID(射频识别技术)的应用架构规划指南

    从EPCGlobal所倡导的物联网这一宏图伟业开始,结合作者参与一些RFID试点工程的切身体会,着重探讨一个典型RFID应用系统所应具备 ...

    STM32H743开发板移植micropython并外扩32M的SQPI flash和32M的SDRAM

    本帖最后由 异想天开168 于 2020-6-12 11:32 编辑   自从去年接触到micropython后就痴迷上了它,因为它能够将python代码在 ...

    FPGA的时钟质量对设计的影响

    FPGA的时钟质量对设计的影响

    【测评SGP40】快速部署实现的人工智能环境空气质量跟踪模型 #1 开箱介绍

    1、本次评测的主要内容 因为SGP40是高精度,低功耗VOC挥发性空气污染指数监测传感器,有16位的数字采样精度。 监测环境,提 ...

    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表