这节需要知道的知识点

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. What Is HLS (HTTP Live Streaming)?

    HTTP Live Streaming  (HLS) Executive Summary HTTP Live Streaming (or HLS) is an adaptive streaming c ...

  2. 示例:在Nuget发布自己的包的步骤

    原文:示例:在Nuget发布自己的包的步骤 一.目的:很多时候都在用第三方的Nuget包,现成的轮子可以减少很多工作量,同时我们也可以造轮子供自己和其他人使用,本示例主要演示如何发布dll到Nuget ...

  3. 总结:WPF中ResourceDictionary资源文件的查找和遍历方法

    原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary()     ...

  4. c#调用python脚本实现排序(适用于python脚本中不包含第三方模块的情况)

    引用:https://www.cnblogs.com/zoe-yan/p/10374757.html 利用vs2017c#调用python脚本需要安装IronPython.我是通过vs2017的工具- ...

  5. python基础09--闭包,装饰器

    1.1 闭包 1.函数作为第一类对象,支持赋值给变量,作为参数传递给其它函数,作为其它函数的返回值,支持函数的嵌套,实现了__call__方法的类实例对象也可以当做函数被调用 2.s= func  - ...

  6. Devops K8s

    公司在组建Devops团队,base在上海 徐家汇.具体职位有Devops工程师和K8s工程师. 有意者请私信.

  7. 线下AWD平台搭建以及一些相关问题解决

    线下AWD平台搭建以及一些相关问题解决 一.前言 文章首发于tools,因为发现了一些新问题但是没法改,所以在博客进行补充. 因为很多人可能没有机会参加线下的AWD比赛,导致缺乏这方面经验,比如我参加 ...

  8. C# 判断域名或ip+端口号 是否能正常连接?

    private static ManualResetEvent TimeoutObject = new ManualResetEvent(false); /// <summary> /// ...

  9. Android源码分析(七)-----如何解决java编译版本问题

    一 : 问题描述 Your version is: java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1 ...

  10. Golang: 模拟搜索引擎爬虫

    最近网站需要针对百度做 SEO 优化,用 Go 语言写了个测试程序,模拟一下百度的爬虫,看看返回的内容是否正确. 代码很简单,就是发送一个请求,把百度相关的信息放入请求头中即可,代码如下: packa ...