|
| 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 json_object * | json_object_new_array_ext (int initial_size) |
| |
| 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 int | json_object_array_shrink (struct json_object *jso, int empty_slots) |
| |
| 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
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
-
| obj | the json_object instance |
| idx | the index to insert the element at |
| val | the json_object to be added |
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
-
| obj | the json_object instance |
- 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
-
| obj | the json_object instance |
- 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
-
| obj | the json_object instance |
- 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 of val will not be incremented, in effect transferring ownership that object to obj, and thus val will be freed when obj is. (i.e. through json_object_put(obj))
If you want to retain a reference to the added object, independent of the lifetime of obj, you must increment the refcount with json_object_get(val) (and later release it with json_object_put()).
Since ownership transfers to obj, you must make sure that you do in fact have ownership over val. For instance, json_object_new_object() will give you ownership until you transfer it, whereas json_object_object_get() does not.
Any previous object stored under key in obj will have its refcount decremented, and be freed normally if that drops to zero.
- 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
-
| obj | the json_object instance |
| key | the object field name |
- 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
Decrement the reference count of json_object and free if it reaches zero.
You must have ownership of obj prior to doing this or you will cause an imbalance in the reference count, leading to a classic use-after-free bug. In particular, you normally do not need to call json_object_put() on the json_object returned by json_object_object_get() or json_object_array_get_idx().
Just like after calling free() on a block of memory, you must not use obj after calling json_object_put() on it or any object that it is a member of (unless you know you've called json_object_get(obj) to explicitly increment the refcount).
NULL may be passed, which which case this is a no-op.
- Parameters
-
| obj | the json_object instance |
- Returns
- 1 if the object was freed.
- See Also
- json_object_get()
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 |