我正在使用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没有卡住/崩溃,其他functiosn继续工作并且它仍然发送数据,它似乎是空的...):
最佳答案
我不会在aJson结构中使用free
!
你怎么知道这些结构是什么?检查有关如何免费的库文档。
我在您链接的页面上找到了这个:
做完了吗删除根(这将处理其他所有事务)。
aJson.deleteItem(root);
而且这(因为您使用的是aJson列表):
列表在aJson中很容易处理,创建列表可以简单地使用
提供的API函数:
aJson.create<TYPE>Array(objects,24);
您只需传递相应类型的数组:char*[]
,int[]
等
上。
aJSON不会对您创建事物的顺序做任何假设
in。您可以如上所述附加对象,然后将子对象添加到
每个对象都有
aJson.addItemToArray()
或用
aJson.deleteItemFromArray()
-也会删除对象,或者
aJson.detachItemFromArray()
-不会释放内存
调用aJson.print()时,它将结构呈现为文本。