JSON Serializer

group LWJSON_SERIALIZER

JSON serializer.

Typedefs

typedef lwjsonr_t (*lwjson_serializer_callback_fn)(void *ctx, const char *str, size_t str_len)

Callback function type for serialization.

Param ctx

[in] User context passed to callback

Param str

[in] String to serialize

Param str_len

[in] Length in bytes of string to serialize

Return

lwjsonOK on success, member of lwjsonr_t otherwise

Enums

enum lwjson_serializer_stack_type_t

Stack element types for tracking nesting.

Values:

enumerator LWJSON_SERIALIZER_TYPE_OBJECT = 0

Object type on stack

enumerator LWJSON_SERIALIZER_TYPE_ARRAY

Array type on stack

Functions

lwjsonr_t lwjson_serializer_init(lwjson_serializer_t *serializer, char *user_buffer, size_t buffer_size)

Initialize JSON serializer with user buffer.

Parameters
  • serializer[inout] Pointer to serializer structure

  • user_buffer[in] User-provided buffer for JSON output

  • buffer_size[in] Size of user buffer

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_finalize(lwjson_serializer_t *serializer, size_t *total_length)

Finalize serialization and get total length of serialized data.

Parameters
  • serializer[inout] Pointer to serializer structure

  • total_length[out] Pointer to store total length of serialized data (only valid when using default buffer callback, can be NULL)

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_init_callback(lwjson_serializer_t *serializer, lwjson_serializer_callback_fn callback, void *ctx)

Initialize serializer with callback function.

Parameters
  • serializer[inout] Pointer to serializer structure

  • callback[in] Callback function to execute for output

  • ctx[in] User context to pass to callback

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_start_object(lwjson_serializer_t *serializer, const char *key, size_t key_len)

Start a new JSON object.

Creates a new JSON object in the serializer output. The object can be a root object (key is NULL), a named object within another object (key provided), or an unnamed object within an array (key is NULL).

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Object key name. Use NULL for root object or array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_start_array(lwjson_serializer_t *serializer, const char *key, size_t key_len)

Start a new JSON array.

Creates a new JSON array in the serializer output. The array can be a root array (key is NULL), a named array within an object (key provided), or an unnamed array within another array (key is NULL).

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Array key name. Use NULL for root array or array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_end_object(lwjson_serializer_t *serializer)

End current JSON object.

Closes the current JSON object by writing the closing brace }. Must be called after all object members have been added. The number of end_object calls must match the number of start_object calls.

Parameters

serializer[inout] Pointer to serializer structure. Must not be NULL.

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_end_array(lwjson_serializer_t *serializer)

End current JSON array.

Closes the current JSON array by writing the closing bracket ]. Must be called after all array elements have been added. The number of end_array calls must match the number of start_array calls.

Parameters

serializer[inout] Pointer to serializer structure. Must not be NULL.

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_add_string(lwjson_serializer_t *serializer, const char *key, size_t key_len, const char *value, size_t value_len)

Add string value to JSON.

Adds a string value to the JSON output. The string is properly escaped according to JSON specification. For object members, provide a key. For array elements, set key to NULL.

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Key name for object member. Use NULL for array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

  • value[in] String value to add. Must not be NULL.

  • value_len[in] Length of value string in bytes.

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_add_uint(lwjson_serializer_t *serializer, const char *key, size_t key_len, uint64_t value)

Add unsigned integer value to JSON.

Adds an unsigned 64-bit integer to the JSON output. The number is converted to string representation without quotes.

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Key name for object member. Use NULL for array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

  • value[in] Unsigned integer value to add (0 to 18446744073709551615).

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_add_int(lwjson_serializer_t *serializer, const char *key, size_t key_len, int64_t value)

Add signed integer value to JSON.

Adds a signed 64-bit integer to the JSON output. The number is converted to string representation without quotes. Negative numbers include a minus sign.

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Key name for object member. Use NULL for array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

  • value[in] Signed integer value to add (-9223372036854775808 to 9223372036854775807).

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_add_float(lwjson_serializer_t *serializer, const char *key, size_t key_len, double value)

Add floating point value to JSON.

Adds a double-precision floating point number to the JSON output. The number is converted to string representation using %.15g format (15 significant digits) without quotes.

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Key name for object member. Use NULL for array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

  • value[in] Floating point value to add (IEEE 754 double precision).

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_add_bool(lwjson_serializer_t *serializer, const char *key, size_t key_len, uint8_t value)

Add boolean value to JSON.

Adds a boolean value to the JSON output. The value is represented as true or false literal (without quotes).

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Key name for object member. Use NULL for array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

  • value[in] Boolean value (0 for false, non-zero for true).

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

lwjsonr_t lwjson_serializer_add_null(lwjson_serializer_t *serializer, const char *key, size_t key_len)

Add null value to JSON.

Adds a null value to the JSON output. The value is represented as “null” literal (without quotes).

Parameters
  • serializer[inout] Pointer to serializer structure. Must not be NULL.

  • key[in] Key name for object member. Use NULL for array element.

  • key_len[in] Length of key string in bytes. Ignored if key is NULL.

Returns

lwjsonOK on success, member of lwjsonr_t otherwise

struct lwjson_serializer_default_ctx_t
#include <lwjson_serializer.h>

Context structure for default buffered output.

Public Members

char *buffer

Pointer to the buffer for serialized output

size_t capacity

Maximum capacity of the buffer

size_t length

Current length of the serialized output

struct lwjson_serializer_t
#include <lwjson_serializer.h>

JSON serializer structure.

Public Members

lwjson_serializer_stack_type_t stack[LWJSON_CFG_SERIALIZER_MAX_STACK_DEPTH]

Stack for tracking nesting

int32_t top

Current top of stack

uint8_t need_comma

Flag indicating if comma is needed before next element

lwjson_serializer_callback_fn callback

Callback function for serialization

void *ctx

User context passed to callback

lwjson_serializer_default_ctx_t default_ctx

Default context for buffered output