
Zepto JSON Embedded Encoder/Decoder (serializer/deserializer) has been written specifically for small embedded systems/microcontrollers with limited RAM and Flash/ROM memory space, it has the following features and restrictions:
Features:
- Encodes (serializes) from and Decodes (deserializes) to a (fixed memory size) C data structure (generated by the JSON Embedded Creation tool, see below)
- Uses a const (Flash/ROM based) table to navigate the data structure (generated by the JSON Embedded Creation tool)
- uses only 20 bytes (Atmel SAM3S) of Flash per structure item or array definition
- The JSON Embedded tool generates the const table and data structure from a JSON template file
- Non-blocking state machine decoder and encoder to enable other tasks to execute in a non-RTOS system
- Non-recursive
- Can serialize (process) as little as 1 character at a time for both encode and decode
- Can ignore unexpected JSON that is not defined in the template (compile time switch to disable)
- Handles null values
- Converts number types to types specified by the JSON template and defined in the C structure
- Full embedded C source code
- Inexpensive, per product royality free licence
Restrictions:
To enable a compact fixed sized memory footprint, a few restrictions are required (which are the norm anyway):
- All values within a JSON array must be of the same type
- Strings are ASCII UTF-8 only. Note: "\uYYXX" is supported for the lower 8 bits (XX), the upper 8-bits YY are ignored for decode and are set to 00 for encode.
JSON Embedded Creation Tool
This pre-compile or compile time tool uses sample JSON as a template to build and output the JSON Embedded C header file which contains the C structure and const (Flash/ROM) table for including in a C file. The tool has additional notation to changes name strings, array maximum sizes and C types.
This compile-time method to create the run-time Zepto JSON C structure and encode/decode Flash LUT is unique and produces extremely low RAM and Flash usage compared to other JSON implementations, it is non-recursive and non-blocking - ideal for tightly coded, reliable real-time systems.
|