如何通过ArduinoJson使用createNestedArray()将JsonArray放入JsonObject中?

拉尔克里斯蒂安

我正在尝试通过TCP将来自ESP32的JSON数据发送到另一个客户端。这应该重复发生。JSON-String包含一个数组。但是,当我尝试使用函数createNestedArray()Arduino文档示例那样在JSON文档中放置数组时,它会工作几次,直到开始创建空数组为止。

最小的代码是这样的:

#include "ArduinoJson.h"

StaticJsonDocument<3000> doc;
JsonObject root = doc.to<JsonObject>();

void insertJsonArray(JsonObject root) {
    JsonArray arr = root.createNestedArray("arrValues");
    arr.add(42);
    arr.add(77); 
}

void setup() {
    Serial.begin(115200);
}

void loop() {
    insertJsonArray(root);

    // Print values
    serializeJsonPretty(root, Serial);

    // Print size of Json-Document
    Serial.print("Json-Size: ");
    Serial.println(root.memoryUsage());

    delay(250);
}

对于前92次迭代,输出看起来像预期的那样:

{
  "arrValues": [
    42,
    77
  ]
}
Json-Size: 48

但是之后,它仅发送空数组:

{
  "arrValues": []
}
Json-Size: 16

有谁知道为什么它突然停止工作呢?

首先,在讨论问题之前,让我们先讨论所需的json对象的容量(即大小)。如果您使用ArduinoJson Assistant,则json对象

{
  "arrValues": [
    42,
    77
  ]
}

大约需要58个字节(如ArduinoJson Assistant所建议的,ESP32需要额外分配10个字节),因此为您分配3000个字节doc会浪费很多内存,而60个字节就足以满足json对象的目的。

StaticJsonDocument<60> doc;

现在介绍您所描述的问题。您有doc3000字节的StaticJsonDocument ,并且不断地将JsonArrayroot插入中doc,就像将rootinfinitely附加到中一样doc,因此它迟早会溢出。我看不出为什么需要不断执行此操作的任何原因,如果需要在循环中创建json对象,请将的声明StaticJsonDocument移入循环并在需要时创建它。

void loop() {
    StaticJsonDocument<60> doc;
    JsonObject root = doc.to<JsonObject>();

    JsonArray arr = root.createNestedArray("arrValues");
    arr.add(42);
    arr.add(77); 
    ...
}

您也可以使用DynamicJsonDocument代替StaticJsonDocument

    // use ArduinoJson Assistant tool to get the capacity
    const size_t capacity = JSON_ARRAY_SIZE(2) + JSON_OBJECT_SIZE(1) + 20;
    DynamicJsonDocument doc(capacity);
    JsonObject root = doc.to<JsonObject>();

    JsonArray arr = root.createNestedArray("arrValues");
    arr.add(42);
    arr.add(77); 

ArduinoJson是一个功能强大的库,但是它需要对C ++功能有一点点了解才能有效地使用它,请花一些时间浏览所有文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何管理将Jsonobject中的int值放入查询中?

来自分类Dev

在Gson中,如何将JsonArray添加到JsonObject?

来自分类Dev

如何使用Servlet使用JSONObject在Java中创建正确的JsonArray

来自分类Dev

如何将JSONObject转换为JSONArray

来自分类Dev

如何将JSONObject转换为JSONArray

来自分类Dev

使用Python将JSONObject转换为JSONArray

来自分类Dev

如何在JsonArray中更改JsonObject?

来自分类Dev

如何访问JSONArray中的JSONObject中的JSONObject?Java /安卓

来自分类Dev

我如何将JSONArray数据放入Android中的LinkedHashMap中?

来自分类Dev

如何通过Swift中的代码将图像放入按钮中?

来自分类Dev

将jsonArray放入SharedPreferenses

来自分类Dev

在POST请求中将JSONArray放入JSONObject的问题

来自分类Dev

将JSONObject中的JSONArray转换为单个JSONObjects

来自分类Dev

将动态 JSONObject 的 JSONArray 映射到 java 中的 java 对象

来自分类Dev

使用一项将JSONObject强制为JSONArray

来自分类Dev

Android使用密钥将JSONObject添加到JSONArray

来自分类Dev

无法使用Volley将JSONArray转换为JSONObject

来自分类Dev

使用一项将JSONObject强制为JSONArray

来自分类Dev

如何在Java中解析JSONArray中的JSONObject?

来自分类Dev

将JSONObject转换为JSONArray

来自分类Dev

将JSONObject放入JSONArray或反之亦然,将额外的反斜杠添加到JSON Array-Android

来自分类Dev

如何在 jsonobject 中设置一个 jsonarray?

来自分类Dev

如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

来自分类Dev

如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

来自分类Dev

如何使用内部包含 JSONArray 的 JSONObject 转换为 DataObject

来自分类Dev

将ArrayList放入参数JsonObject

来自分类Dev

如何使用React Native iOS将ListView放入ScrollView中?

来自分类Dev

如何使用Python zipfile将文件放入zip存档中

来自分类Dev

如何使用ngdoc将控制器放入模块中

Related 相关文章

  1. 1

    如何管理将Jsonobject中的int值放入查询中?

  2. 2

    在Gson中,如何将JsonArray添加到JsonObject?

  3. 3

    如何使用Servlet使用JSONObject在Java中创建正确的JsonArray

  4. 4

    如何将JSONObject转换为JSONArray

  5. 5

    如何将JSONObject转换为JSONArray

  6. 6

    使用Python将JSONObject转换为JSONArray

  7. 7

    如何在JsonArray中更改JsonObject?

  8. 8

    如何访问JSONArray中的JSONObject中的JSONObject?Java /安卓

  9. 9

    我如何将JSONArray数据放入Android中的LinkedHashMap中?

  10. 10

    如何通过Swift中的代码将图像放入按钮中?

  11. 11

    将jsonArray放入SharedPreferenses

  12. 12

    在POST请求中将JSONArray放入JSONObject的问题

  13. 13

    将JSONObject中的JSONArray转换为单个JSONObjects

  14. 14

    将动态 JSONObject 的 JSONArray 映射到 java 中的 java 对象

  15. 15

    使用一项将JSONObject强制为JSONArray

  16. 16

    Android使用密钥将JSONObject添加到JSONArray

  17. 17

    无法使用Volley将JSONArray转换为JSONObject

  18. 18

    使用一项将JSONObject强制为JSONArray

  19. 19

    如何在Java中解析JSONArray中的JSONObject?

  20. 20

    将JSONObject转换为JSONArray

  21. 21

    将JSONObject放入JSONArray或反之亦然,将额外的反斜杠添加到JSON Array-Android

  22. 22

    如何在 jsonobject 中设置一个 jsonarray?

  23. 23

    如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

  24. 24

    如何使用GSON WHen对象解析JSON是JSONObject还是JSONArray

  25. 25

    如何使用内部包含 JSONArray 的 JSONObject 转换为 DataObject

  26. 26

    将ArrayList放入参数JsonObject

  27. 27

    如何使用React Native iOS将ListView放入ScrollView中?

  28. 28

    如何使用Python zipfile将文件放入zip存档中

  29. 29

    如何使用ngdoc将控制器放入模块中

热门标签

归档