这节需要知道的知识点

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

下载JSON文件:

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

等到倒计时到0

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

解析个数据

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

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

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

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

  1. char jsonValue1[]="{\"datemcu\":\"updata\",\"cmd\":\"model\"}";
  2.  
  3. cJSON *jsonData,*jsonValue;
  4. int main(void)
  5. {
  6. NVIC_Configuration();
  7. uart_init(); //串口初始化为115200
  8. GpioInit();
  9. DelayInit();
  10. rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1
  11.  
  12. jsonData = cJSON_Parse(jsonValue1);//把数据存储到cJSON链表中
  13. if(jsonData)//是JSON数据
  14. {
  15. jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在则序列化cJSON结构体中
  16. if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
  17. {
  18. printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
  19. }
  20. jsonValue = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中
  21.  
  22. if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
  23. {
  24. printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
  25. }
  26. }
  27. cJSON_Delete(jsonData);//释放内存

解析个二维的数据:

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

  1. char jsonValue2[]="{\"datemcu\":\"updata\",\"cmd\":{\"Id\":\"CH010100\",\"code\":\"001\"}}";
  2. cJSON *jsonData,*jsonItem,*jsonValue;
  3. int main(void)
  4. {
  5. NVIC_Configuration();
  6. uart_init(); //串口初始化为115200
  7. GpioInit();
  8. DelayInit();
  9. rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1
  10.  
  11. jsonData = cJSON_Parse(jsonValue2);//把数据存储到cJSON链表中
  12. if(jsonData)//是JSON数据
  13. {
  14. jsonValue = cJSON_GetObjectItem(jsonData,"datemcu");//查找datemcu字段,如果存在则序列化cJSON结构体中
  15. if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
  16. {
  17. printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
  18. }
  19.  
  20. jsonItem = cJSON_GetObjectItem(jsonData,"cmd");//查找cmd字段,如果存在则序列化cJSON结构体中
  21. if(jsonItem->type == cJSON_Object)//获取当前字段的数据类型,(一个JSON对象)
  22. {
  23. jsonValue = cJSON_GetObjectItem(jsonItem,"Id");//查找Id字段,如果存在则序列化cJSON结构体中
  24. if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
  25. {
  26. printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
  27. }
  28. jsonValue = cJSON_GetObjectItem(jsonItem,"code");//查找code字段,如果存在则序列化cJSON结构体中
  29. if(jsonValue->type == cJSON_String)//获取当前字段的数据类型
  30. {
  31. printf("%s\r\n",jsonValue->valuestring);//打印相应字段的值
  32. }
  33. }
  34. }
  35. 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. BZOJ3145 [Feyat cup 1.5]Str 后缀树、启发式合并

    传送门--BZOJCH 考虑两种情况: 1.答案由一个最长公共子串+可能的一个模糊匹配位置组成.这个用SAM求一下最长公共子串,但是需要注意只出现在\(S\)的开头和\(T\)的结尾的子串是不能够通过 ...

  2. Linux命令注释—HDFS运维

    HDFS运维—命令注释 1 实验背景 HDFS是大数据其他组件的基础,Hive的数据存储在HDFS中,Mapreduce.Spark 等计算数据也存储在HDFS 中,HBase 的 region 也是 ...

  3. Java学习:字符串概述与特点

    字符串概述与特点 java.lang.String类 代表字符串 API当中说:Java程序中的所有字符串字面值(如“abc“)都作为此类的实例实现.其实就是说:程序当中所用的双引号字符串,都是Str ...

  4. MyBatis-Plus入门Demo详解

    一.简介: 引用官方文档(本文主要参考官方文档示例): MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生 ...

  5. CSAPP第二章show_bytes函数的探究

    CSAPP第二章中给出了一个帮助我们观察数据的位模式的函数--show_bytes函数,具体实现如下: #include<stdio.h> typedef unsigned char *b ...

  6. JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态

    JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态  2017年10月25日  Jet Ma  JavaPlatform JVM故障分析系列系列文章 JVM故障分析系列之一: ...

  7. .NET中的异步编程——动机和单元测试

    背景 自.NET 4.5发布以来已经有很长一段时间了.留在了我们的记忆里,其发布在2012年8月15日.是的,六年前.感觉老了吗?好吧,我不打算让你做出改变,而是提醒你一些.NET发布的亮点.此版本带 ...

  8. springboot使用 @Transactional 注解配置事务管理

    介绍 springboot对数据库事务的使用非常的方便,只需要在方法上添加@Transactional注解即可.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的 ...

  9. 图像上划凸多边形(convexHull()函数)

    import numpy as npimport cv2 as cvimg=np.zeros((400,410),np.uint8)points=np.random.randint(100,400,( ...

  10. TP5.0使用助手函数model出现\common\Model\类不存在

    在ThinkPHP5.0中有一个助手助手函数model(),可以实例化具体的模型,包括分层模型,只要传入类名(第一个参数),分层名(第二个参数).这个函数其实是ThinkPHP框架Loader中的一个 ...