封存into 发表于 2025-6-30 12:26

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

如何在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

在资源受限的嵌入式系统中,注意内存使用量,避免频繁分配和释放。

sesefadou 发表于 2025-7-3 19:30

从 GitHub 获取 cJSON 源文件

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对象
}

wengh2016 发表于 2025-7-4 13:10

下载cJSON库            

lihuami 发表于 2025-7-4 15:07

使用在线工具(如JSONLint)验证格式是否正确。

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);
}

claretttt 发表于 2025-7-6 11:02

将 cJSON 或其他库加入项目源码中

jimmhu 发表于 2025-7-6 15:48

在项目中引入第三方 C 语言 JSON 库来处理 JSON 数据。

macpherson 发表于 2025-7-10 14:20

将cJSON源文件(cjson.c和cjson.h)添加到你的项目中

biechedan 发表于 2025-7-10 16:51

常用的库有cJSON和jansson。

jackcat 发表于 2025-7-11 10:57

使用第三方库            

wwppd 发表于 2025-7-11 11:27

使用轻量级开源 JSON 库            

ulystronglll 发表于 2025-7-11 13:54

JSON解析/生成可能占用较多内存

mikewalpole 发表于 2025-7-11 15:06

使用 cJSON 解析 JSON 字符串

averyleigh 发表于 2025-7-12 13:29

cJSON库动态分配内存,使用后需通过cJSON_Delete释放内存,避免内存泄漏。

gygp 发表于 2025-7-12 17:06

cJSON库在处理大JSON数据时可能占用较多资源,建议根据实际需求优化JSON数据结构。

uptown 发表于 2025-7-12 21:39

推荐使用轻量级C语言库cJSON
页: [1]
查看完整版本: 如何在STM32CUBEIDE中使用和编写JSON语言