好的,以下是ESP32-C3中解析JSON格式数据的完整示例,分别使用Arduino和ESP-IDF。
Arduino 示例
#include <Arduino.h>
#include <ArduinoJson.h>
void setup() {
Serial.begin(115200);
// JSON 字符串
const char* json = "{\"sensor\":\"temperature\",\"value\":23.5}";
// 解析 JSON
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, json);
if (error) {
Serial.print(F("JSON 解析失败: "));
Serial.println(error.f_str());
return;
}
// 提取数据
const char* sensor = doc["sensor"];
float value = doc["value"];
// 输出结果
Serial.print("传感器: ");
Serial.println(sensor);
Serial.print("值: ");
Serial.println(value);
}
void loop() {
// 你的主循环代码
}
ESP-IDF 示例
-
在
CMakeLists.txt
中添加 ArduinoJson 依赖:idf_component_register(SRCS "main.c" INCLUDE_DIRS "." REQUIRES ArduinoJson)
-
在
main.c
文件中:
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "cJSON.h"
void app_main() {
// JSON 字符串
const char *json = "{\"sensor\":\"temperature\",\"value\":23.5}";
// 解析 JSON
cJSON *json_obj = cJSON_Parse(json);
if (json_obj == NULL) {
printf("JSON 解析失败\n");
return;
}
// 提取数据
cJSON *sensor = cJSON_GetObjectItem(json_obj, "sensor");
cJSON *value = cJSON_GetObjectItem(json_obj, "value");
if (cJSON_IsString(sensor) && (sensor->valuestring != NULL)) {
printf("传感器: %s\n", sensor->valuestring);
}
if (cJSON_IsNumber(value)) {
printf("值: %.2f\n", value->valuedouble);
}
// 释放 JSON 对象
cJSON_Delete(json_obj);
}
说明
- Arduino 示例使用
ArduinoJson
库,确保在库管理器中安装该库。 - ESP-IDF 示例使用
cJSON
库,通常在ESP-IDF中自带。需要确保在项目的 CMakeLists.txt 中正确链接。
希望这些示例能帮助到你!如果有其他问题,请告诉我。