这节需要知道的知识点

https://www.cnblogs.com/yangfengwu/p/11685325.html

下载JSON文件:

链接:         https://sourceforge.net/projects/cjson/

等到倒计时到0

拷贝JSON源文件和头文件,添加头文件到include.h

解析个数据

"{\"datemcu\":\"updata\",\"cmd\":\"model\"}"

JSON标准格式  {"字段","字段值"}

\"  意思是转义 "    就是说这个" 并不起什么作用,只是个"

如果不写 \  那么会认为  "{"   就会和前面的" 配合了

char jsonValue1[]="{\"datemcu\":\"updata\",\"cmd\":\"model\"}";

cJSON *jsonData,*jsonValue;
int main(void)
{
NVIC_Configuration();
uart_init(); //串口初始化为115200
GpioInit();
DelayInit();
rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1 jsonData = cJSON_Parse(jsonValue1);//把数据存储到cJSON链表中
if(jsonData)//是JSON数据
{
jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
jsonValue = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中 if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
}
cJSON_Delete(jsonData);//释放内存

解析个二维的数据:

"{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}";

char jsonValue2[]="{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}";
cJSON *jsonData,*jsonItem,*jsonValue;
int main(void)
{
NVIC_Configuration();
uart_init(); //串口初始化为115200
GpioInit();
DelayInit();
rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1 jsonData = cJSON_Parse(jsonValue2);//把数据存储到cJSON链表中
if(jsonData)//是JSON数据
{
jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
} jsonItem = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中
if(jsonItem->type == cJSON_Object)//获取当前字段的数据类型,(一个JSON对象)
{
jsonValue = cJSON_GetObjectItem(jsonItem,"Id");//查找Id字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
jsonValue = cJSON_GetObjectItem(jsonItem,"code");//查找code字段,如果存在则序列化cJSON结构体中
if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
{
printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
}
}
}
cJSON_Delete(jsonData);//释放内存

封装个数据:

{"datemcu":"updata","value":2}

封装个复杂点的数据:

更多操作看官方例子:

错误. 后来发现是malloc 内存不足导致的(cJSON 的数据全部用malloc 分配)

单片机模块化程序: 单片机加入JSON是个不错的选择的更多相关文章

  1. 单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)

    拷贝这两个文件到自己的工程 测试1://单片机发送AT+RST\r\n  如果单片机串口接收到OK 或者ready 执行下一条 测试视频: https://qqqqqbucket.oss-cn-bei ...

  2. 单片机C程序优化

    单片机C程序优化 对程序进行优化,通常是指优化程序代码或程序执行速度.优化代码和优化速度实际上是一个予盾的统一.一般是优化了代码的尺寸,就会带来执行时间的增加:如果优化了程序的执行速度,通常会带来代码 ...

  3. STM8S003/005/007芯片解密单片机解密程序提取复制经验分享!

    STM8S003/005/007芯片解密单片机解密程序提取复制 芯片解密型号: STM8S003K3T6,STM8S005K6T6,STM8S007C8T6,STM8S003F3P6 STM8S005 ...

  4. 【转】STC51单片机下载程序的时候不要在VCC端接DHT11

    今天使用51单片机学习板调试DHT11湿度传感器,下载程序的时候把DHT11烧掉了. 一开始我使用杜邦线把DHT11的VCC引脚接到学习板上的VCC端,GND接GND,数据端口接51单片机的P0.0. ...

  5. 单片机内程序运行的时候ram空间是如何分配的?

    转自:http://blog.sina.com.cn/s/blog_a575eb9401014tam.html 单片机内程序运行的时候ram空间是如何分配的?我现对一个程序进行减少片内ram的使用的优 ...

  6. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h>  void main(void)  {   EA=1;      //开放总中断   E ...

  7. [转] 图解单片机下载程序电路原理之USB转串口线、CH340、PL2303、MAX232芯片的使用

    点击阅读原文 目前为止,我接触单片机已有不少时日,从选择元器件.原理图.PCB.电路硬件调试.软件开发也算小有心得 .单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈 ...

  8. 51单片机和STM32单片机区别在那里

    ​大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...

  9. STM32单片机和51单片机区别

    单片机 / AVR / PIC / STM32 / 8051803189C5189S51 6905 单片机简介 单片微型计算机简称单片机,简单来说就是集CPU(运算.控制).RAM(数据存储-内存). ...

随机推荐

  1. excel查找定位操作(for lutai)

    产成品出库的单价要根据订单号和存货编码引用产成品入库的单价 方法一:使用Index 和Match =INDEX(产成品入库!I2:P13    ,IF( ) ,7) 方法二:使用vlookup ,首先 ...

  2. Firefox 无法播放 youtube

    今天 firefox (目前是 67,之前刚装了 62 的时候也是这个问题..)升级之后,莫名其妙没法使用 youbube 了. 尝试了很多方法,我觉得可能是这条起作用了: 1. 关闭所有网页. 2. ...

  3. ELK学习笔记之Kibana安装配置

    Kibana 是一个开源的分析和可视化平台,是ELK的重要部分.Kibana提供搜索.查看和与存储在 Elasticsearch 索引中的数据进行交互的功能.开发者或运维人员可以轻松地执行高级数据分析 ...

  4. laravel 5.5 仓库模式 文件之间接口与实现操作

    仓库模式 最直接的意思就是: Eloquent数据(数据库)查询  方便快捷,简单明了.自己怎么写的,就怎么去调用,完全ok~ 本质意思: 仓库就像是业务内部的数据对象集合,负责协调业务和数据映射层之 ...

  5. Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif

    Django---图书管理系统,一对多(外键设置),__str__和__repr__的区别,进阶版项目说明简介.模版语言if ... else ..endif 一丶__str__ 和 __repr__ ...

  6. pandas-18 reindex用法

    pandas-18 reindex用法 pandas中的reindex方法可以为series和dataframe添加或者删除索引. 方法:serise.reindex().dataframe.rein ...

  7. Android 8.0编译过程

    Android编译系统中的Android.bp.Blueprint与Soonghttp://note.qidong.name/2017/08/android-blueprint/ 工具链关系 Andr ...

  8. 简述-selenium对web实现自动化测试

    首先,我是基于python进行对selenium操作和使用的,主要分为selenium的实现原理和selenium的操作这两大部分的简单分享(由于本人水平有限,仅做基础的概述和总结): 一.selen ...

  9. 大数据:Hadoop(HDFS 读写数据流程及优缺点)

    一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode ...

  10. dfs 二叉树中序遍历迭代解法——求解BST中第k小元素

    BST中第K小的元素 中文English 给一棵二叉搜索树,写一个 KthSmallest 函数来找到其中第 K 小的元素. Example 样例 1: 输入:{1,#,2},2 输出:2 解释: 1 ...