JSON C decode functions handle the decoding of simple XSD types. Calls to these functions are assembled in the C source code generated by the XBinder compiler to decode complex XML schema-based messages. In general, these complement the encoding model in which individual functions exist for each type.
As an example, the code documented above to encode a simple boolean value can be reversed to decode the value:
OSBOOL pdu;
OSCTXT ctxt;
int i, stat;
const char* filename = "message.json";
/* Init context */
stat = rtxInitContext (&ctxt);
if (0 != stat) {
printf ("Context initialization failed.\n");
rtxErrPrint (&ctxt);
return stat;
}
/* Create input source object */
stat = rtxStreamFileCreateReader (&ctxt, filename);
if (0 != stat) {
printf ("Create file input stream failed.\n");
rtxErrPrint (&ctxt);
rtxFreeContext (&ctxt);
return stat;
}
/* Call compiler generated decode function */
if (stat == 0)
stat = rtJsonDecBool (&ctxt, &pdu);
if (stat == 0) {
printf ("Decode was successful\n");
printf ("Decoded record:\n");
Print_Boolean ("Boolean", pdu);
}
else {
printf ("decode failed\n");
rtxErrPrint (&ctxt);
}
rtxStreamClose (&ctxt);
rtxFreeContext (&ctxt);
A complete reference to all of the built-in C JSON decode functions is available in the XBinder C/C++ Runtime Reference Manual.