我正在开发一个带有ArduinoYùn模块的项目。我目前正在尝试从Arduino创建JSON以返回。这个JSON的创建发生在嵌套的for循环中。我正在使用aJson Arduino库(https://github.com/interactive-matter/aJson)。
当我构建Arduino时,它第一次正确发送。当我在那之后进行REST调用时,我只得到一个空行\r\n
(这很可能是HTTP响应头之后的空行)...
我不确定我是否在处理内存问题,或者是否还有其他问题。我很习惯使用面向目标的语言,我知道C,但是因为它没有垃圾收集释放内存,所以对我来说并不是那么清楚......
这是我创建和发送JSON的方法的代码:
void getAll(YunClient client) {
aJsonObject *root, *object;
root = aJson.createArray();
int i = 0;
for(i; i < 4; i++) {
int j = 0;
for(j; j < 3; j++) {
aJson.addItemToArray(root, object = aJson.createObject());
aJson.addNumberToObject(object, "test", 1);
//should I do a free(object); here?
}
}
//headers
//client.println("HTTP/1.1 200 OK");
client.println("Status: 200");
client.println("Content-Type: application/javascript");
client.println("Access-Control-Allow-Origin: *");
//client.print("\r\n");
client.println();
// Send feedback to client
char* result = aJson.print(root);
Serial.println(result);
client.println(result);
free(root);
free(result);
}
正如你所看到的,在嵌套for循环内部,我不确定我是否应该释放内存。
第一次进行REST调用时:
我第二次得到这个(但我的Arduino没有堵塞/崩溃,其他功能继续工作,它仍然发送数据,它似乎是空的......):
答案 0 :(得分:0)
我不会将free
用于aJson结构!
你怎么知道这些结构中有什么?查看图书馆文档,了解如何免费。
我在你链接的页面上找到了这个:
完成了吗?删除根(这会处理其他所有事情)。
aJson.deleteItem(root);
还有这个(因为你使用的是aJson列表):
列表很容易在aJson中处理,以创建一个你可以简单使用的列表 提供的API函数:
aJson.create<TYPE>Array(objects,24);
您只需传递相应类型的数组:
char*[]
,int[]
等 上。aJSON不会对您创建事物的顺序做出任何假设 如上所述,您可以附加对象,然后将子项添加到 每个具有
的对象
aJson.addItemToArray()
或用
删除它们
aJson.deleteItemFromArray()
- 也会删除对象,或aJson.detachItemFromArray()
- 没有释放内存只要调用aJson.print(),它就会将结构呈现为文本。