Arduino JSON中如何将字符串作为对象名称?
Arduino JSON中如何将字符串作为对象名称?
兄弟,我完全懂你想要实现的效果——就是想用一个字符串变量里的内容(比如你例子里的"test")来当JSON对象的键名,而不是写死的固定字符串对吧?
先给你指出你原来代码里的小问题:同一个代码块里不能有两个同名的变量nameObj(一个是String类型,一个是JsonObject类型),这肯定会触发编译器报错,得先把变量名区分开,比如把存字符串的那个改成objName。
接下来重点说怎么实现你的需求,用Arduino JSON库(6.x版本及以上,ESP32用这个库完全没问题)其实很简单,直接用数组下标语法或者createNestedObject()方法就行,具体分两种情况:
- 如果你是要在一个JSON文档(JsonDocument)或者已有的JsonObject里,创建一个以字符串变量为键的嵌套对象:
#include <ArduinoJson.h> void setup() { Serial.begin(115200); // 创建一个静态JSON文档,大小根据你要存的数据调整 StaticJsonDocument<256> doc; // 定义要作为对象名称的字符串变量 String objName = "test"; // 核心:用字符串变量作为键,创建嵌套JsonObject JsonObject targetObj = doc.createNestedObject(objName); // 给这个嵌套对象添加一些测试数据 targetObj["status"] = "ok"; targetObj["count"] = 42; // 序列化后打印到串口,看看结果 serializeJsonPretty(doc, Serial); } void loop() {}
运行这个代码,串口会输出格式化后的JSON:
{ "test": { "status": "ok", "count": 42 } }
- 如果你只是想给已有的JsonObject添加一个键值对,键是字符串变量的值,直接用下标赋值就行:
// 假设dataObj是一个已有的JsonObject String keyName = "temperature"; dataObj[keyName] = 25.5;
另外要注意,不管你用的是StaticJsonDocument还是DynamicJsonDocument,这个用法都是通用的,区别只是前者是静态内存分配(适合小数据),后者是动态分配(适合大数据)。
备注:内容来源于stack exchange,提问作者Hosein shirani
相关产品推荐
相关产品推荐

