X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=doc%2Fapiref.rst;h=0a96999b9922707f27bac4fc224de2bd0cf1db00;hb=b495b9654715ca8ea2f18d7f92eff9da2ed57083;hp=1ca7c2bb66f90bf4ec50cc952d5b388ec6f9e6ed;hpb=dd2fe1ebe80fa9a95265fbcd20b6ffdfdc30d469;p=jansson.git diff --git a/doc/apiref.rst b/doc/apiref.rst index 1ca7c2b..0a96999 100644 --- a/doc/apiref.rst +++ b/doc/apiref.rst @@ -493,6 +493,16 @@ The following functions implement an iteration protocol for objects: Returns an opaque iterator which can be used to iterate over all key-value pairs in *object*, or *NULL* if *object* is empty. +.. cfunction:: void *json_object_iter_at(json_t *object, const char *key) + + Like :cfunc:`json_object_iter()`, but returns an iterator to the + key-value pair in *object* whose key is equal to *key*, or NULL if + *key* is not found in *object*. Iterating forward to the end of + *object* only yields all key-value pairs of the object if *key* + happens to be the first key in the underlying hash table. + + .. versionadded:: 1.3 + .. cfunction:: void *json_object_iter_next(json_t *object, void *iter) Returns an iterator pointing to the next key-value pair in *object* @@ -509,6 +519,21 @@ The following functions implement an iteration protocol for objects: Extract the associated value from *iter*. +.. cfunction:: int json_object_iter_set(json_t *object, void *iter, json_t *value) + + Set the value of the key-value pair in *object*, that is pointed to + by *iter*, to *value*. + + .. versionadded:: 1.3 + +.. cfunction:: int json_object_iter_set_new(json_t *object, void *iter, json_t *value) + + Like :cfunc:`json_object_iter_set()`, but steals the reference to + *value*. This is useful when *value* is newly created and not used + after the call. + + .. versionadded:: 1.3 + The iteration protocol can be used for example as follows:: /* obj is a JSON object */ @@ -673,3 +698,75 @@ The following functions perform the actual JSON decoding. object it contains, or *NULL* on error, in which case *error* is filled with information about the error. See above for discussion on the *error* parameter. + + +Equality +======== + +Testing for equality of two JSON values cannot, in general, be +achieved using the ``==`` operator. Equality in the terms of the +``==`` operator states that the two :ctype:`json_t` pointers point to +exactly the same JSON value. However, two JSON values can be equal not +only if they are exactly the same value, but also if they have equal +"contents": + +* Two integer or real values are equal if their contained numeric + values are equal. An integer value is never equal to a real value, + though. + +* Two strings are equal if their contained UTF-8 strings are equal. + +* Two arrays are equal if they have the same number of elements and + each element in the first array is equal to the corresponding + element in the second array. + +* Two objects are equal if they have exactly the same keys and the + value for each key in the first object is equal to the value of the + corresponding key in the second object. + +* Two true, false or null values have no "contents", so they are equal + if their types are equal. (Because these values are singletons, + their equality can actually be tested with ``==``.) + +The following function can be used to test whether two JSON values are +equal. + +.. cfunction:: int json_equal(json_t *value1, json_t *value2) + + Returns 1 if *value1* and *value2* are equal, as defined above. + Returns 0 if they are inequal or one or both of the pointers are + *NULL*. + + .. versionadded:: 1.2 + + +Copying +======= + +Because of reference counting, passing JSON values around doesn't +require copying them. But sometimes a fresh copy of a JSON value is +needed. For example, if you need to modify an array, but still want to +use the original afterwards, you should take a copy of it first. + +Jansson supports two kinds of copying: shallow and deep. There is a +difference between these methods only for arrays and objects. Shallow +copying only copies the first level value (array or object) and uses +the same child values in the copied value. Deep copying makes a fresh +copy of the child values, too. Moreover, all the child values are deep +copied in a recursive fashion. + +.. cfunction:: json_t *json_copy(json_t *value) + + .. refcounting:: new + + Returns a shallow copy of *value*, or *NULL* on error. + + .. versionadded:: 1.2 + +.. cfunction:: json_t *json_deep_copy(json_t *value) + + .. refcounting:: new + + Returns a deep copy of *value*, or *NULL* on error. + + .. versionadded:: 1.2