cctools
|
JSON Expressions (JX) library. More...
#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 struct jx *(* | jx_eval_func_t )(const char *ident) |
Evaluation function. More... | |
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 | |
struct jx * | jx_null () |
Create a JX null value. More... | |
struct jx * | jx_boolean (int boolean_value) |
Create a JX boolean value. More... | |
struct jx * | jx_integer (jx_int_t integer_value) |
Create a JX integer value. More... | |
struct jx * | jx_double (double double_value) |
Create a JX floating point value. More... | |
struct jx * | jx_string (const char *string_value) |
Create a JX string value. More... | |
struct jx * | jx_format (const char *fmt,...) |
Create a JX string value using prinf style formatting. More... | |
struct jx * | jx_symbol (const char *symbol_name) |
Create a JX symbol. More... | |
struct jx * | jx_array (struct jx_item *items) |
Create a JX array. More... | |
struct jx * | jx_arrayv (struct jx *value,...) |
Create a JX array with inline items. More... | |
struct jx * | jx_object (struct jx_pair *pairs) |
Create a JX object. More... | |
struct jx_pair * | jx_pair (struct jx *key, struct jx *value, struct jx_pair *next) |
Create a JX key-value pair. More... | |
struct jx_item * | jx_item (struct jx *value, struct jx_item *next) |
Create a JX array item. More... | |
int | jx_istype (struct jx *j, jx_type_t type) |
Test an expression's type. More... | |
int | jx_equals (struct jx *j, struct jx *k) |
Test two expressions for equality. More... | |
struct jx * | jx_copy (struct jx *j) |
Duplicate an expression. More... | |
void | jx_delete (struct jx *j) |
Delete an expression recursively. More... | |
void | jx_pair_delete (struct jx_pair *p) |
Delete a key-value pair. More... | |
void | jx_item_delete (struct jx_item *i) |
Delete an array item. More... | |
struct jx * | jx_remove (struct jx *object, struct jx *key) |
Remove a key-value pair from an object. More... | |
int | jx_insert (struct jx *object, struct jx *key, struct jx *value) |
Insert a key-value pair into an object. More... | |
void | jx_insert_integer (struct jx *object, const char *key, jx_int_t value) |
Insert an integer value into an object. More... | |
void | jx_insert_double (struct jx *object, const char *key, double value) |
Insert a double value into an object. More... | |
void | jx_insert_string (struct jx *object, const char *key, const char *value) |
Insert a string value into an object. More... | |
struct jx * | jx_lookup (struct jx *object, const char *key) |
Search for a arbitrary item in an object. More... | |
const char * | jx_lookup_string (struct jx *object, const char *key) |
Search for a string item in an object. More... | |
jx_int_t | jx_lookup_integer (struct jx *object, const char *key) |
Search for an integer item in an object. More... | |
double | jx_lookup_double (struct jx *object, const char *key) |
Search for a double item in an object. More... | |
void | jx_array_insert (struct jx *array, struct jx *value) |
Insert an item at the beginning of an array. More... | |
void | jx_array_append (struct jx *array, struct jx *value) |
Append an item at the end of an array. More... | |
int | jx_is_constant (struct jx *j) |
Determine if an expression is constant. More... | |
void | jx_export (struct jx *j) |
Export a jx object as a set of environment variables. More... | |
struct jx * | jx_evaluate (struct jx *j, jx_eval_func_t evaluator) |
Evaluate an expression. More... | |
JSON Expressions (JX) library.
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" }
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 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. |