当前位置: 首页 > news >正文

STM32利用CJSON库生成和解析JSON格式数据

一 概念

  stm32使用cjson的时候,需要下载cjson的库函数,这个在github上有的,直接搜索cjson下载即可。下面是一个实例解析。

二 实例解析

1.读取json的数据内容,注意这个字符串的写法,在嵌入式c中,要加\的

 const char *str = "{\"action\":\"writePara\",\"value\":30,\"writeId\":\"40001\"}";

void cjson_read(void)
{

    cJSON *root; 
    cJSON *jsonAction;
    cJSON *jsonRWAddr;
    int modbusReadWriteAddr;


    root=cJSON_Parse((const char *)str);
    jsonAction = cJSON_GetObjectItem(root,"action"); 
    if(strcmp(jsonAction->valuestring,"writePara")==NULL)     
    {
        jsonRWAddr = cJSON_GetObjectItem(root,"writeId");  //获取读的ID
        modbusReadWriteAddr = atoi(jsonRWAddr->valuestring); //convert addr to int    
        mprintf("modbus addr is:%d\n\r",modbusReadWriteAddr);       
    }
    cJSON_Delete(root);
    cJSON_Delete(jsonAction);
    cJSON_Delete(jsonRWAddr);


}

2.json的数据生成格式如下:


void cjson_generate_string(void)
{
        char *jsonValue;
        cJSON *jsonCreat;
        cJSON *jsonCreatValue;

        jsonCreat = cJSON_CreateObject();//创建一个json对象
        jsonCreatValue = cJSON_CreateObject();//创建一个json对象

        cJSON_AddItemToObject(jsonCreat, "action", cJSON_CreateString("readPara"));
        cJSON_AddItemToObject(jsonCreatValue, "id", cJSON_CreateString("1"));
        cJSON_AddItemToObject(jsonCreat, "value", jsonCreatValue);        

        jsonValue=cJSON_Print(jsonCreat);
        cJSON_Delete(jsonCreat);
        cJSON_Delete(jsonCreatValue);
        mprintf("jsonValue len is:%d\n\r",strlen(jsonValue));
        mprintf("jsonValueis:%s\n\r",jsonValue);

}

三 总结

  1.解析生成字符串需要的堆栈比较大,需要把STM32的堆栈搞大一点.

  2.json的注意要用完及时删除。

http://www.dtcms.com/a/75406.html

相关文章:

  • 【论文笔记】RAQ-VAE: Rate-Adaptive Vector-Quantized Variational Autoencoder
  • 内容中台的AI应用核心是什么?
  • 第三课:DeepSeek的高级应用探索
  • java输出语句
  • 定时任务引起的死锁
  • 如何创建并保存HTML文件?零基础入门教程
  • 【NLP 35、序列标注任务】
  • MATLAB 控制系统设计与仿真 - 28
  • React(三):脚手架解析、组件分类、生命周期、组件通信
  • Rust + WebAssembly 实现康威生命游戏并进行单元测试
  • 从中序与后序遍历序列构造二叉树(Java)
  • Rockchip --- 图像时延优化
  • pandas中excel自定义单元格颜色
  • 3D视觉相机引导机器人的原理
  • Arduino入门常用指令详解及语法指南
  • DeepSeek在数据爬取领域的革新实践:架构解析与实战指南
  • 案例驱动的 IT 团队管理:创新与突破之路:第三章 项目攻坚:从流程优化到敏捷破局-3.2.2 Scrum vs Kanban 的场景化选择
  • DeepSeek:AI 搜索引擎的革新者?
  • Chat2DB:自然语言生成 SQL 的时代来临,数据库管理更简单
  • FPGA中级项目4——DDS实现
  • 物联网中设备与平台通信的方式
  • SENT接口
  • 如何处理和格式化日期差异:JavaScript 日期差异计算实例
  • 高项第十二章——项目质量管理
  • 关于foobar2000插件的一点理解
  • ollama 可以通过127.0.0.1访问,但是无法通过本机ip访问
  • 人工智能领域大模型、大模型使用、AI工作流 学习路径
  • Oracle ASM 磁盘组冗余策略
  • 向量数据库:AI时代的“新基建”
  • 护网面试题