I'm new to ArduinoJSON - so perhaps it is a newbie's question.... but I wish to pass a StaticJsonDocument
into a function as a parameter ( later on it should be implemented in a library ).
exmaple below shows test_1
what I wish to obtain, but by duplicating StaticJsonDocument
, which I don't want to do.
How can test_1
should be written (as I tried in test_2
)?
#include <ArduinoJson.h>
StaticJsonDocument<200> doc;
void createJSON() {
doc["sensor"] = "gps";
doc["time"] = 1351824120;
JsonArray data = doc.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
// Generate the minified JSON and send it to the Serial port.
serializeJson(doc, Serial);
Serial.println("JSON is created:");
// Generate the prettified JSON and send it to the Serial port.
serializeJsonPretty(doc, Serial);
}
bool test_1(StaticJsonDocument<100> _doc){
serializeJson(_doc, Serial);
return true;
}
bool test2(const JsonObject& _doc){
Serial.println("HI");
serializeJson(_doc, Serial);
}
void setup() {
Serial.begin(9600);
createJSON();
test_1(doc);
}
void loop() {
// not used in this example
}
1 Answer 1
The StaticJsonDocument
is a template class. The template value in <> is here only the size of the internal buffer, but every size used generates a different class. (memory usage!)
To have the parameter of the function take an StaticJsonDocument
version instance, it must be the same version or a common base class. In this case the base class is JsonDocument
.
If you don't use the reference symbol &
the parameter is copied. In this case StaticJsonDocument<200> _doc
or JsonDocument _doc
would create a copy and that copy would be modified in the function. The object used as parameter value would be unchanged - empty.
So use
void test2(const JsonDocument& _doc) {
Serial.println("HI");
serializeJson(_doc, Serial);
}
-
Hey @Juraj, thanks for this answer. I'm trying to do exactly the same thing as @Guy .D, except when implementing your solution I'm getting a compiler error:
no known conversion for argument 2 from ArduinoJson6101_000::StaticJsonDocument<168u>' to 'const JsonObject& {aka const ArduinoJson6101_000::ObjectRef&}
Any advice would be great and I can post a code snippet if required.Peza– Peza2019年05月05日 21:35:37 +00:00Commented May 5, 2019 at 21:35 -
-
1sorry, the code snippet was from Guy's code, not from my test. corrected2019年05月07日 03:40:19 +00:00Commented May 7, 2019 at 3:40
bool test_1(StaticJsonDocument<DOC_SIZE>& _doc) {
use a define or const for the size. it must be the same