The JSON C low-level encode functions handle the JSON encoding of simple XML schema data types. Calls to these functions are assembled in the C source code generated by the XBinder compiler to accomplish the encoding of complex structures. These functions are also directly callable from within a user's application program if the need to accomplish a low level encoding function exists.
The procedure to call a low-level encode function is the same as the procedure to call a compiler generated encode function described earlier. It is as follows:
The rtxInitContext function must first be called to initialize a context block structure.
Either a stream must be set up or a memory buffer specified to receive the encoded message. To set up a stream, one of the rtxStream functions must be called. To set up a memory buffer, the rtxInitContextBuffer function is used.
Encode functions are invoked to encode the JSON data types.
If a stream was used, the encoded message will have been written to the output stream. If a memory buffer was used, the result of the encoding will start at the beginning of the buffer. The encoded stream is a standard UTF-8 null-terminated text string.
For example, the following code fragment could be used to encode a document with a single, boolean value.
Boolean data; 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; } /* Populate structure of generated type */ data = TRUE; stat = rtxStreamFileCreateWriter (&ctxt, filename); if (0 == stat) stat = JsonEnc_personnelRecord (&ctxt, data); rtxStreamClose (&ctxt); if (0 == stat) { printf ("encoded message:\n"); rtxPrintFile (filename); printf ("\n"); } else { printf ("Encoding failed\n"); rtxErrPrint (&ctxt); } }
A complete reference to all of the built-in C JSON encode functions is available in the XBinder C/C++ Runtime Reference Manual.