|
| JSON_EXPORT struct json_object * | json_object_get (struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_put (struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_is_type (const struct json_object *obj, enum json_type type) |
| |
| JSON_EXPORT enum json_type | json_object_get_type (const struct json_object *obj) |
| |
| JSON_EXPORT const char * | json_object_to_json_string (struct json_object *obj) |
| |
| JSON_EXPORT const char * | json_object_to_json_string_ext (struct json_object *obj, int flags) |
| |
| JSON_EXPORT const char * | json_object_to_json_string_length (struct json_object *obj, int flags, size_t *length) |
| |
| JSON_EXPORT void * | json_object_get_userdata (json_object *jso) |
| |
| JSON_EXPORT void | json_object_set_userdata (json_object *jso, void *userdata, json_object_delete_fn *user_delete) |
| |
| JSON_EXPORT void | json_object_set_serializer (json_object *jso, json_object_to_json_string_fn *to_string_func, void *userdata, json_object_delete_fn *user_delete) |
| |
| JSON_EXPORT struct json_object * | json_object_new_object (void) |
| |
| JSON_EXPORT struct lh_table * | json_object_get_object (const struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_object_length (const struct json_object *obj) |
| |
| | JSON_C_CONST_FUNCTION (JSON_EXPORT size_t json_c_object_sizeof(void)) |
| |
| JSON_EXPORT int | json_object_object_add (struct json_object *obj, const char *key, struct json_object *val) |
| |
| JSON_EXPORT int | json_object_object_add_ex (struct json_object *obj, const char *const key, struct json_object *const val, const unsigned opts) |
| |
| JSON_EXPORT struct json_object * | json_object_object_get (const struct json_object *obj, const char *key) |
| |
| JSON_EXPORT json_bool | json_object_object_get_ex (const struct json_object *obj, const char *key, struct json_object **value) |
| |
| JSON_EXPORT void | json_object_object_del (struct json_object *obj, const char *key) |
| |
| JSON_EXPORT struct json_object * | json_object_new_array (void) |
| |
| JSON_EXPORT struct array_list * | json_object_get_array (const struct json_object *obj) |
| |
| JSON_EXPORT size_t | json_object_array_length (const struct json_object *obj) |
| |
| JSON_EXPORT void | json_object_array_sort (struct json_object *jso, int(*sort_fn)(const void *, const void *)) |
| |
| JSON_EXPORT struct json_object * | json_object_array_bsearch (const struct json_object *key, const struct json_object *jso, int(*sort_fn)(const void *, const void *)) |
| |
| JSON_EXPORT int | json_object_array_add (struct json_object *obj, struct json_object *val) |
| |
| JSON_EXPORT int | json_object_array_put_idx (struct json_object *obj, size_t idx, struct json_object *val) |
| |
| JSON_EXPORT struct json_object * | json_object_array_get_idx (const struct json_object *obj, size_t idx) |
| |
| JSON_EXPORT int | json_object_array_del_idx (struct json_object *obj, size_t idx, size_t count) |
| |
| JSON_EXPORT struct json_object * | json_object_new_boolean (json_bool b) |
| |
| JSON_EXPORT json_bool | json_object_get_boolean (const struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_set_boolean (struct json_object *obj, json_bool new_value) |
| |
| JSON_EXPORT struct json_object * | json_object_new_int (int32_t i) |
| |
| JSON_EXPORT struct json_object * | json_object_new_int64 (int64_t i) |
| |
| JSON_EXPORT struct json_object * | json_object_new_uint64 (uint64_t i) |
| |
| JSON_EXPORT int32_t | json_object_get_int (const struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_set_int (struct json_object *obj, int new_value) |
| |
| JSON_EXPORT int | json_object_int_inc (struct json_object *obj, int64_t val) |
| |
| JSON_EXPORT int64_t | json_object_get_int64 (const struct json_object *obj) |
| |
| JSON_EXPORT uint64_t | json_object_get_uint64 (const struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_set_int64 (struct json_object *obj, int64_t new_value) |
| |
| JSON_EXPORT int | json_object_set_uint64 (struct json_object *obj, uint64_t new_value) |
| |
| JSON_EXPORT struct json_object * | json_object_new_double (double d) |
| |
| JSON_EXPORT struct json_object * | json_object_new_double_s (double d, const char *ds) |
| |
| JSON_EXPORT int | json_c_set_serialization_double_format (const char *double_format, int global_or_thread) |
| |
| JSON_EXPORT int | json_object_double_to_json_string (struct json_object *jso, struct printbuf *pb, int level, int flags) |
| |
| JSON_EXPORT double | json_object_get_double (const struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_set_double (struct json_object *obj, double new_value) |
| |
| JSON_EXPORT struct json_object * | json_object_new_string (const char *s) |
| |
| JSON_EXPORT struct json_object * | json_object_new_string_len (const char *s, const int len) |
| |
| JSON_EXPORT const char * | json_object_get_string (struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_get_string_len (const struct json_object *obj) |
| |
| JSON_EXPORT int | json_object_set_string (json_object *obj, const char *new_value) |
| |
| JSON_EXPORT int | json_object_set_string_len (json_object *obj, const char *new_value, int len) |
| |
| JSON_EXPORT struct json_object * | json_object_new_null (void) |
| |
| JSON_EXPORT int | json_object_equal (struct json_object *obj1, struct json_object *obj2) |
| |
| JSON_EXPORT int | json_object_deep_copy (struct json_object *src, struct json_object **dst, json_c_shallow_copy_fn *shallow_copy) |
| |
Core json-c API. Start here, or with json_tokener.h.
| #define JSON_C_OBJECT_KEY_IS_CONSTANT (1 << 2) |
A flag for the json_object_object_add_ex function which flags the key as being constant memory. This means that the key will NOT be copied via strdup(), resulting in a potentially huge performance win (malloc, strdup and free are usually performance hogs). It is acceptable to use this flag for keys in non-constant memory blocks if the caller ensure that the memory holding the key lives longer than the corresponding json object. However, this is somewhat dangerous and should only be done if really justified. The general use-case for this flag is cases where the key is given as a real constant value in the function call, e.g. as in json_object_object_add_ex(obj, "ip", json, JSON_C_OBJECT_KEY_IS_CONSTANT);
Perform a shallow copy of src into *dst as part of an overall json_object_deep_copy().
If src is part of a containing object or array, parent will be non-NULL, and key or index will be provided. When shallow_copy is called *dst will be NULL, and must be non-NULL when it returns. src will never be NULL.
If shallow_copy sets the serializer on an object, return 2 to indicate to json_object_deep_copy that it should not attempt to use the standard userdata copy function.
- Returns
- On success 1 or 2, -1 on errors
| JSON_EXPORT int json_c_set_serialization_double_format |
( |
const char * |
double_format, |
|
|
int |
global_or_thread |
|
) |
| |
Set a global or thread-local json-c option, depending on whether JSON_C_OPTION_GLOBAL or JSON_C_OPTION_THREAD is passed. Thread-local options default to undefined, and inherit from the global value, even if the global value is changed after the thread is created. Attempting to set thread-local options when threading is not compiled in will result in an error. Be sure to check the return value.
double_format is a "%g" printf format, such as "%.20g"
- Returns
- -1 on errors, 0 on success.
Insert or replace an element at a specified index in an array (a json_object of type json_type_array)
The reference count will not be incremented. This is to make adding fields to objects in code more compact. If you want to retain a reference to an added object you must wrap the passed object with json_object_get
The reference count of a replaced object will be decremented.
The array size will be automatically be expanded to the size of the index if the index is larger than the current size.
- Parameters
-
Get the double floating point value of a json_object
The type is coerced to a double if the passed object is not a double. integer objects will return their double conversion. Strings will be parsed as a double. If no conversion exists then 0.0 is returned and errno is set to EINVAL. null is equivalent to 0 (no error values set)
If the value is too big to fit in a double, then the value is set to the closest infinity with errno set to ERANGE. If strings cannot be converted to their double value, then EINVAL is set & NaN is returned.
Arrays of length 0 are interpreted as 0 (with no error flags set). Arrays of length 1 are effectively cast to the equivalent object and converted using the above rules. All other arrays set the error to EINVAL & return NaN.
NOTE: Set errno to 0 directly before a call to this function to determine whether or not conversion was successful (it does not clear the value for you).
- Parameters
-
- Returns
- a double floating point number
Get the int value of a json_object
The type is coerced to a int if the passed object is not a int. double objects will return their integer conversion. Strings will be parsed as an integer. If no conversion exists then 0 is returned and errno is set to EINVAL. null is equivalent to 0 (no error values set)
Note that integers are stored internally as 64-bit values. If the value of too big or too small to fit into 32-bit, INT32_MAX or INT32_MIN are returned, respectively.
- Parameters
-
- Returns
- an int
Get the string value of a json_object
If the passed object is of type json_type_null (i.e. obj == NULL), NULL is returned.
If the passed object of type json_type_string, the string contents are returned.
Otherwise the JSON representation of the object is returned.
The returned string memory is managed by the json_object and will be freed when the reference count of the json_object drops to zero.
- Parameters
-
- Returns
- a string or NULL
Create a new json_object of type json_type_double, using the exact serialized representation of the value.
This allows for numbers that would otherwise get displayed inefficiently (e.g. 12.3 => "12.300000000000001") to be serialized with the more convenient form.
Notes:
This is used by json_tokener_parse_ex() to allow for an exact re-serialization of a parsed object.
The userdata field is used to store the string representation, so it can't be used for other data if this function is used.
A roughly equivalent sequence of calls, with the difference being that the serialization function won't be reset by json_object_set_double(), is:
- Parameters
-
| d | the numeric value of the double. |
| ds | the string representation of the double. This will be copied. |
Add an object field to a json_object of type json_type_object
The reference count will not be incremented. This is to make adding fields to objects in code more compact. If you want to retain a reference to an added object, independent of the lifetime of obj, you must wrap the passed object with json_object_get.
Upon calling this, the ownership of val transfers to obj. Thus you must make sure that you do in fact have ownership over this object. For instance, json_object_new_object will give you ownership until you transfer it, whereas json_object_object_get does not.
- Parameters
-
| obj | the json_object instance |
| key | the object field name (a private copy will be duplicated) |
| val | a json_object or NULL member to associate with the given field |
- Returns
- On success,
0 is returned. On error, a negative value is returned.
Get the json_object associate with a given object field. Deprecated/discouraged: used json_object_object_get_ex instead.
This returns NULL if the field is found but its value is null, or if the field is not found, or if obj is not a json_type_object. If you need to distinguish between these cases, use json_object_object_get_ex().
No reference counts will be changed. There is no need to manually adjust reference counts through the json_object_put/json_object_get methods unless you need to have the child (value) reference maintain a different lifetime than the owning parent (obj). Ownership of the returned value is retained by obj (do not do json_object_put unless you have done a json_object_get). If you delete the value from obj (json_object_object_del) and wish to access the returned reference afterwards, make sure you have first gotten shared ownership through json_object_get (& don't forget to do a json_object_put or transfer ownership to prevent a memory leak).
- Parameters
-
- Returns
- the json_object associated with the given field name
Get the json_object associated with a given object field.
This returns true if the key is found, false in all other cases (including if obj isn't a json_type_object).
No reference counts will be changed. There is no need to manually adjust reference counts through the json_object_put/json_object_get methods unless you need to have the child (value) reference maintain a different lifetime than the owning parent (obj). Ownership of value is retained by obj.
- Parameters
-
| obj | the json_object instance |
| key | the object field name |
| value | a pointer where to store a reference to the json_object associated with the given field name. |
It is safe to pass a NULL value.
- Returns
- whether or not the key exists
Set a custom serialization function to be used when this particular object is converted to a string by json_object_to_json_string.
If custom userdata is already set on this object, any existing user_delete function is called before the new one is set.
If to_string_func is NULL the default behaviour is reset (but the userdata and user_delete fields are still set).
The userdata parameter is optional and may be passed as NULL. It can be used to provide additional data for to_string_func to use. This parameter may be NULL even if user_delete is non-NULL.
The user_delete parameter is optional and may be passed as NULL, even if the userdata parameter is non-NULL. It will be called just before the json_object is deleted, after it's reference count goes to zero (see json_object_put()). If this is not provided, it is up to the caller to free the userdata at an appropriate time. (i.e. after the json_object is deleted)
Note that the userdata is the same as set by json_object_set_userdata(), so care must be taken not to overwrite the value when both a custom serializer and json_object_set_userdata() are used.
- Parameters
-
| jso | the object to customize |
| to_string_func | the custom serialization function |
| userdata | an optional opaque cookie |
| user_delete | an optional function from freeing userdata |
Set an opaque userdata value for an object
The userdata can be retrieved using json_object_get_userdata().
If custom userdata is already set on this object, any existing user_delete function is called before the new one is set.
The user_delete parameter is optional and may be passed as NULL, even if the userdata parameter is non-NULL. It will be called just before the json_object is deleted, after it's reference count goes to zero (see json_object_put()). If this is not provided, it is up to the caller to free the userdata at an appropriate time. (i.e. after the json_object is deleted)
Note: Objects created by parsing strings may have custom serializers set which expect the userdata to contain specific data (due to use of json_object_new_double_s()). In this case, json_object_set_serialiser() with NULL as to_string_func should be used instead to set the userdata and reset the serializer to its default value.
- Parameters
-
| jso | the object to set the userdata for |
| userdata | an optional opaque cookie |
| user_delete | an optional function from freeing userdata |