You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ArduinoJson合并两个JSON文档?

ArduinoJson合并两个JSON文档的正确方法

核心问题

你尝试用add()、set()方法合并JSON对象,但这些方法是针对JSON数组的操作,而你的传感器返回的是JSON对象,所以无法实现键值对的合并与覆盖。ArduinoJson提供了专门的mergeInto()函数来处理对象合并,重复键会以后者的值为准。

示例代码的正确合并方式

针对你给出的测试代码,使用mergeInto()可以实现预期的合并效果:

#include <ArduinoJson.h>

void setup() {
  Serial.begin(115200);
  
  DynamicJsonDocument doc1(1024);
  DynamicJsonDocument doc2(1024);
  DynamicJsonDocument mergedDoc(1024);

  // 填充测试数据
  doc1["test"]["a"]["b"] = "1";
  doc1["test"]["a"]["c"] = "2";

  doc2["test"]["a"]["d"] = "3";
  doc2["test"]["a"]["c"] = "4";

  // 先将doc1合并到目标文档
  mergeInto(mergedDoc, doc1);
  // 再合并doc2,重复键会被doc2的值覆盖
  mergeInto(mergedDoc, doc2);

  // 打印结果验证
  serializeJsonPretty(mergedDoc, Serial);
}

void loop() {}

运行后输出的JSON会符合你的预期:

{
  "test": {
    "a": {
      "b": "1",
      "c": "4",
      "d": "3"
    }
  }
}

实际传感器场景的解决方案

针对你整合DHT11和Dallas传感器数据的需求,需要分别提取两个传感器返回的JSON对象中的temp和humidity字段,合并到目标文档的对应位置:

假设DHT11.getValuesJson()和DallasSensors.getValuesJson()返回的是DynamicJsonDocument或JsonObject,可以这样处理:

#include <ArduinoJson.h>

void setup() {
  Serial.begin(115200);
  
  DynamicJsonDocument doc(2048);
  DynamicJsonDocument dhtJson = DHT11.getValuesJson();
  DynamicJsonDocument dallasJson = DallasSensors.getValuesJson();

  // 合并温度数据:先合并Dallas的temp,再合并DHT的temp,重复键覆盖
  mergeInto(doc["data"]["temp"], dallasJson["temp"]);
  mergeInto(doc["data"]["temp"], dhtJson["temp"]);

  // 合并湿度数据:DHT的湿度数据
  mergeInto(doc["data"]["humidity"], dhtJson["humidity"]);

  // 打印最终结果
  serializeJsonPretty(doc, Serial);
}

void loop() {}

关键说明

  • mergeInto(target, source)会把source对象的所有键值对复制到target对象中,如果target已有相同键,会被source的值覆盖。
  • 确保目标文档的内存足够(比如DynamicJsonDocument的大小参数要足够容纳所有传感器数据),避免内存溢出导致合并失败。
  • 如果传感器返回的是JsonObject而非JsonDocument,直接传入mergeInto即可,无需额外转换。

常见误区

  • 不要用add()处理对象合并:add()是向数组中添加元素,会把整个传感器JSON作为数组元素插入,而不是合并键值对。
  • 不要直接赋值doc["test"]["temp"] = sensorJson:这会直接覆盖doc["test"]["temp"]的原有内容,而不是合并。

内容的提问来源于stack exchange,提问作者Damago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:00:04