This module implements extended JSON expressions as a C library. We use our own custom library to avoid external dependencies and to implement various extensions to strict JSON.
For example, the following bit of code:
struct jx * obj = jx_object( jx_pair( jx_string("hello"), jx_string("world"), 0) );
jx_print_file(jx,stdout);
jx_delete(jx);
Will create the following output:
{ "hello" : "world" }
#include <stdint.h>
#include <assert.h>
Go to the source code of this file.
Data Structures | |
struct | jx_item |
JX item linked-list used by JX_ARRAY and jx::items. More... | |
struct | jx_pair |
JX key-value pairs used by JX_OBJECT and jx::pairs. More... | |
struct | jx |
JX value representing any expression type. More... | |
Typedefs | |
typedef jx *(*) | jx_eval_func_t (const char *ident) |
Evaluation function. | |
Enumerations | |
enum | jx_type_t { JX_NULL, JX_BOOLEAN, JX_INTEGER, JX_DOUBLE, JX_STRING, JX_SYMBOL, JX_ARRAY, JX_OBJECT } |
JX atomic type. More... | |
Functions | |
jx * | jx_null () |
Create a JX null value. | |
jx * | jx_boolean (int boolean_value) |
Create a JX boolean value. | |
jx * | jx_integer (jx_int_t integer_value) |
Create a JX integer value. | |
jx * | jx_double (double double_value) |
Create a JX floating point value. | |
jx * | jx_string (const char *string_value) |
Create a JX string value. | |
jx * | jx_format (const char *fmt,...) |
Create a JX string value using prinf style formatting. | |
jx * | jx_symbol (const char *symbol_name) |
Create a JX symbol. | |
jx * | jx_array (struct jx_item *items) |
Create a JX array. | |
jx * | jx_arrayv (struct jx *value,...) |
Create a JX array with inline items. | |
jx * | jx_object (struct jx_pair *pairs) |
Create a JX object. | |
jx_pair * | jx_pair (struct jx *key, struct jx *value, struct jx_pair *next) |
Create a JX key-value pair. | |
jx_item * | jx_item (struct jx *value, struct jx_item *next) |
Create a JX array item. | |
int | jx_istype (struct jx *j, jx_type_t type) |
Test an expression's type. | |
int | jx_equals (struct jx *j, struct jx *k) |
Test two expressions for equality. | |
jx * | jx_copy (struct jx *j) |
Duplicate an expression. | |
void | jx_delete (struct jx *j) |
Delete an expression recursively. | |
void | jx_pair_delete (struct jx_pair *p) |
Delete a key-value pair. | |
void | jx_item_delete (struct jx_item *i) |
Delete an array item. | |
jx * | jx_remove (struct jx *object, struct jx *key) |
Remove a key-value pair from an object. | |
int | jx_insert (struct jx *object, struct jx *key, struct jx *value) |
Insert a key-value pair into an object. | |
void | jx_insert_integer (struct jx *object, const char *key, jx_int_t value) |
Insert an integer value into an object. | |
void | jx_insert_double (struct jx *object, const char *key, double value) |
Insert a double value into an object. | |
void | jx_insert_string (struct jx *object, const char *key, const char *value) |
Insert a string value into an object. | |
jx * | jx_lookup (struct jx *object, const char *key) |
Search for a arbitrary item in an object. | |
const char * | jx_lookup_string (struct jx *object, const char *key) |
Search for a string item in an object. | |
jx_int_t | jx_lookup_integer (struct jx *object, const char *key) |
Search for an integer item in an object. | |
double | jx_lookup_double (struct jx *object, const char *key) |
Search for a double item in an object. | |
void | jx_array_insert (struct jx *array, struct jx *value) |
Insert an item at the beginning of an array. | |
void | jx_array_append (struct jx *array, struct jx *value) |
Append an item at the end of an array. | |
int | jx_is_constant (struct jx *j) |
Determine if an expression is constant. | |
void | jx_export (struct jx *j) |
Export a jx object as a set of environment variables. | |
jx * | jx_evaluate (struct jx *j, jx_eval_func_t evaluator) |
Evaluate an expression. |
typedef struct jx*(*) jx_eval_func_t(const char *ident) |
Evaluation function.
To use jx_evaluate, the caller must define a function of type jx_eval_func_t which accepts a symbol name and returns a JX value.
enum jx_type_t |
struct jx* jx_null | ( | ) |
Create a JX null value.
struct jx* jx_boolean | ( | int | boolean_value | ) |
Create a JX boolean value.
boolean_value | A C boolean value. |
struct jx* jx_integer | ( | jx_int_t | integer_value | ) |
Create a JX integer value.
integer_value | A C integer. |
struct jx* jx_double | ( | double | double_value | ) |
Create a JX floating point value.
double_value | A C double precision floating point. |
struct jx* jx_string | ( | const char * | string_value | ) |
Create a JX string value.
string_value | A C string, which will be duplciated via strdup(). |
struct jx* jx_format | ( | const char * | fmt, | |
... | ||||
) |
Create a JX string value using prinf style formatting.
fmt | A printf-style format string, followed by matching arguments. |
struct jx* jx_symbol | ( | const char * | symbol_name | ) |
Create a JX symbol.
Note that symbols are an extension to the JSON standard. A symbol is a reference to an external variable, which can be resolved by using jx_evaluate.
symbol_name | A C string. |
Create a JX array with inline items.
item | One or more items of the array must be given, terminated with a null value. |
Create a JX object.
pairs | A linked list of jx_pair key-value pairs. |
Create a JX key-value pair.
key | The key. | |
value | The value. | |
next | The next item in the linked list. |
Create a JX array item.
value | The value of this item. | |
next | The next item in the linked list. |
Test an expression's type.
j | An expression. | |
type | The desired type. |
Test two expressions for equality.
j | A constant expression. | |
k | A constant expression. |
Duplicate an expression.
j | An expression. |
void jx_delete | ( | struct jx * | j | ) |
Delete an expression recursively.
j | An expression to delete. |
void jx_pair_delete | ( | struct jx_pair * | p | ) |
Delete a key-value pair.
p | The key-value pair to delete. |
void jx_item_delete | ( | struct jx_item * | i | ) |
Delete an array item.
i | The array item to delete. |
Remove a key-value pair from an object.
object | The object. | |
key | The key. |
Insert a key-value pair into an object.
object | The object. | |
key | The key. | |
value | The value. |
void jx_insert_integer | ( | struct jx * | object, | |
const char * | key, | |||
jx_int_t | value | |||
) |
Insert an integer value into an object.
object | The object | |
key | The key represented as a C string | |
value | The integer value. |
void jx_insert_double | ( | struct jx * | object, | |
const char * | key, | |||
double | value | |||
) |
Insert a double value into an object.
object | The object | |
key | The key represented as a C string | |
value | The double value. |
void jx_insert_string | ( | struct jx * | object, | |
const char * | key, | |||
const char * | value | |||
) |
Insert a string value into an object.
object | The object | |
key | The key represented as a C string | |
value | The C string value. |
Search for a arbitrary item in an object.
The key is an ordinary string value.
object | The object in which to search. | |
key | The string key to match. |
const char* jx_lookup_string | ( | struct jx * | object, | |
const char * | key | |||
) |
Search for a string item in an object.
The key is an ordinary string value.
object | The object in which to search. | |
key | The string key to match. |
jx_int_t jx_lookup_integer | ( | struct jx * | object, | |
const char * | key | |||
) |
Search for an integer item in an object.
The key is an ordinary string value.
object | The object in which to search. | |
key | The string key to match. |
double jx_lookup_double | ( | struct jx * | object, | |
const char * | key | |||
) |
Search for a double item in an object.
The key is an ordinary string value.
object | The object in which to search. | |
key | The string key to match. |
Insert an item at the beginning of an array.
array | The array to modify. | |
value | The value to insert. |
Append an item at the end of an array.
array | The array to modify. | |
value | The value to append. |
int jx_is_constant | ( | struct jx * | j | ) |
Determine if an expression is constant.
Traverses the expression recursively, and returns true if it consists only of constant values, arrays, and objects.
j | The expression to evaluate. |
void jx_export | ( | struct jx * | j | ) |
Export a jx object as a set of environment variables.
j | A JX_OBJECT. |
struct jx* jx_evaluate | ( | struct jx * | j, | |
jx_eval_func_t | evaluator | |||
) |
Evaluate an expression.
Traverses the expression recursively, and for each value of type JX_SYMBOL, invokes the evaluator function to replace it with a constant value.
j | The expression to evaluate. | |
evaluator | The evaluating function. |