Hi All,
Any ideas why out would ne NULL in this simple test ?
char *test = "{\"num\": 1}";
J *jsn = JParse(test);
char *out = JPrintUnformatted(jsn);
if (out != NULL) {
serialDebug.println(out);
} else {
serialDebug.println("json serialize error");
}
Thanks,
Serge
Strangely the following test modified to work with the original cJSON library works just fine but does not work with the cJSON shipped with Notecard Arduino Lib. I am testing with a Swan
#include <Notecard.h>
#define serialDebug SerialUSB
static const size_t MAX_SERIAL_WAIT_MS = 10000;
J *root = NULL;
J *nmeaParseErrors = NULL;
void setup() {
serialDebug.begin(115200);
size_t begin_serial_wait_ms = ::millis();
while (!serialDebug && (MAX_SERIAL_WAIT_MS > (::millis() - begin_serial_wait_ms))) {
; // wait for serial port to connect. Needed for native USB
}
root = JCreateObject();
JAddTrueToObject(root, "boolean");
JAddStringToObject(root, "string", "test string");
JAddObjectToObject(root, "obj");
nmeaParseErrors = JAddArrayToObject(root, "errorList");
J *oo = JCreateObject();
JAddNumberToObject(oo, "count", 5.0);
JAddNumberToObject(oo, "errorCode", 1.0);
JAddItemToArray(nmeaParseErrors, oo);
}
void loop() {
serialDebug.println(JVersion());
serialDebug.println(JPrintUnformatted(root));
delay(5000);
}
cJSON version
#include <cJSON.h>
#define serialDebug SerialUSB
static const size_t MAX_SERIAL_WAIT_MS = 10000;
cJSON *root = NULL;
cJSON *nmeaParseErrors = NULL;
void setup() {
serialDebug.begin(115200);
size_t begin_serial_wait_ms = ::millis();
while (!serialDebug && (MAX_SERIAL_WAIT_MS > (::millis() - begin_serial_wait_ms))) {
; // wait for serial port to connect. Needed for native USB
}
root = cJSON_CreateObject();
cJSON_AddTrueToObject(root, "boolean");
cJSON_AddStringToObject(root, "string", "test string");
cJSON_AddObjectToObject(root, "obj");
nmeaParseErrors = cJSON_AddArrayToObject(root, "errorList");
cJSON *oo = cJSON_CreateObject();
cJSON_AddNumberToObject(oo, "count", 5.0);
cJSON_AddNumberToObject(oo, "errorCode", 1.0);
cJSON_AddItemToArray(nmeaParseErrors, oo);
}
void loop() {
serialDebug.println(cJSON_Version());
serialDebug.println(cJSON_PrintUnformatted(root));
delay(5000);
}
mat
January 11, 2022, 9:02pm
3
Hi there @ssozonoff !
This does seem strange! Many thanks for providing a SSCCE. I’ll take it for a spin and see if I can reproduce the problem.
mat
January 11, 2022, 9:51pm
4
I’ve reproduced your issue. I’ll try to find the root cause.
Great that you were able to reproduce this, thanks for having a look into it.
mat
January 13, 2022, 4:36am
6
Hi there again @ssozonoff !
So, the quick fix is to instantiate Notecard
and call Notecard::begin()
or one of its overloads. This is necessary to initialize some internals before cjson will work.
Can I ask, what’s your use case for using cjson without the Notecard?
Hi Mat,
Thanks for your reply. The reason for doing this was actually to test the construction of some Json structures on a standalone host (Swan) since my actual setup is outside
Thanks,
Serge
mat
January 20, 2022, 10:36pm
8
Ah, gotcha! Makes sense. Does using Notecard::begin()
work for you in this scenario?