打印
[STM32F4]

如何在STM32CUBEIDE中使用和编写JSON语言

[复制链接]
414|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
封存into|  楼主 | 2025-6-30 12:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何在STM32CUBEIDE中使用和编写JSON语言?我写的电动汽车充电器微控制器的代码,必须使用JSON格式与服务器通信
如何在STM32CUBEIDE实现JSON格式的通信?


使用特权

评论回复
沙发
jobszheng| | 2025-7-1 09:44 | 只看该作者
参考一下json的c语言实现库呗!
我常用的是cjson。但楼主一定要自己处理好内存使用的情况

使用特权

评论回复
板凳
ingramward| | 2025-7-3 16:24 | 只看该作者
cJSON —— 轻量、广泛使用、适合嵌入式系统

使用特权

评论回复
地板
ulystronglll| | 2025-7-3 18:19 | 只看该作者
在资源受限的嵌入式系统中,注意内存使用量,避免频繁分配和释放。

使用特权

评论回复
5
sesefadou| | 2025-7-3 19:30 | 只看该作者
从 GitHub 获取 cJSON 源文件

使用特权

评论回复
6
fengm| | 2025-7-4 10:32 | 只看该作者
#include "cJSON.h"
#include <string.h>

void Generate_JSON(void) {
    // 创建根对象
    cJSON *root = cJSON_CreateObject();
   
    // 添加键值对
    cJSON_AddStringToObject(root, "device", "STM32F103");
    cJSON_AddNumberToObject(root, "temperature", 25.5);
    cJSON_AddBoolToObject(root, "status", 1); // true
   
    // 创建嵌套对象(如传感器数据)
    cJSON *sensor = cJSON_CreateObject();
    cJSON_AddStringToObject(sensor, "type", "DHT11");
    cJSON_AddNumberToObject(sensor, "humidity", 60);
    cJSON_AddItemToObject(root, "sensor", sensor);
   
    // 转换为JSON字符串
    char *json_str = cJSON_Print(root); // 带格式化(易读)
    // char *json_str = cJSON_PrintUnformatted(root); // 无格式化(节省空间)
   
    // 通过串口发送(需提前初始化USART)
    HAL_UART_Transmit(&huart1, (uint8_t *)json_str, strlen(json_str), HAL_MAX_DELAY);
   
    // 释放内存
    free(json_str); // cJSON_Print返回的字符串需手动释放
    cJSON_Delete(root); // 释放整个JSON对象
}

使用特权

评论回复
7
wengh2016| | 2025-7-4 13:10 | 只看该作者
下载cJSON库              

使用特权

评论回复
8
lihuami| | 2025-7-4 15:07 | 只看该作者
使用在线工具(如JSONLint)验证格式是否正确。

使用特权

评论回复
9
hearstnorman323| | 2025-7-4 16:46 | 只看该作者
void parse_json(const char *json_str)
{
    cJSON *root = cJSON_Parse(json_str);
    if (root == NULL) {
        const char *error_ptr = cJSON_GetErrorPtr();
        if (error_ptr != NULL) {
            fprintf(stderr, "Error before: %s\n", error_ptr);
        }
        return;
    }

    // 解析JSON对象
    cJSON *device = cJSON_GetObjectItemCaseSensitive(root, "device");
    if (cJSON_IsObject(device)) {
        cJSON *name = cJSON_GetObjectItemCaseSensitive(device, "name");
        if (cJSON_IsString(name) && (name->valuestring != NULL)) {
            printf("Device Name: %s\n", name->valuestring);
        }

        cJSON *clock = cJSON_GetObjectItemCaseSensitive(device, "clock");
        if (cJSON_IsObject(clock)) {
            cJSON *frequency = cJSON_GetObjectItemCaseSensitive(clock, "frequency");
            if (cJSON_IsNumber(frequency)) {
                printf("Clock Frequency: %d Hz\n", frequency->valueint);
            }

            cJSON *source = cJSON_GetObjectItemCaseSensitive(clock, "source");
            if (cJSON_IsString(source) && (source->valuestring != NULL)) {
                printf("Clock Source: %s\n", source->valuestring);
            }
        }
    }

    // 释放JSON对象
    cJSON_Delete(root);
}

使用特权

评论回复
10
claretttt| | 2025-7-6 11:02 | 只看该作者
将 cJSON 或其他库加入项目源码中

使用特权

评论回复
11
jimmhu| | 2025-7-6 15:48 | 只看该作者
在项目中引入第三方 C 语言 JSON 库来处理 JSON 数据。

使用特权

评论回复
12
macpherson| | 2025-7-10 14:20 | 只看该作者
将cJSON源文件(cjson.c和cjson.h)添加到你的项目中

使用特权

评论回复
13
biechedan| | 2025-7-10 16:51 | 只看该作者
常用的库有cJSON和jansson。

使用特权

评论回复
14
jackcat| | 2025-7-11 10:57 | 只看该作者
使用第三方库              

使用特权

评论回复
15
wwppd| | 2025-7-11 11:27 | 只看该作者
使用轻量级开源 JSON 库              

使用特权

评论回复
16
ulystronglll| | 2025-7-11 13:54 | 只看该作者
JSON解析/生成可能占用较多内存

使用特权

评论回复
17
mikewalpole| | 2025-7-11 15:06 | 只看该作者
使用 cJSON 解析 JSON 字符串

使用特权

评论回复
18
averyleigh| | 2025-7-12 13:29 | 只看该作者
cJSON库动态分配内存,使用后需通过cJSON_Delete释放内存,避免内存泄漏。

使用特权

评论回复
19
gygp| | 2025-7-12 17:06 | 只看该作者
cJSON库在处理大JSON数据时可能占用较多资源,建议根据实际需求优化JSON数据结构。

使用特权

评论回复
20
uptown| | 2025-7-12 21:39 | 只看该作者
推荐使用轻量级C语言库cJSON

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

92

帖子

0

粉丝