dlite-json#
Provides built-in support for JSON in dlite.
A set of utility function for serialising and deserialising dlite instances to/from JSON.
Iterator
-
typedef struct _DLiteJsonIter DLiteJsonIter#
Opaque iterator struct
-
DLiteJsonIter *dlite_json_iter_create(const char *src, int length, const char *metaid)#
Creates and returns a new iterator used by dlite_json_next().
Arguments
src: input JSON string to search.
length: length of
src
. If zero or negative, all ofsrc
will be used.metaid: limit the search to instances of metadata with this id.
The source should be a JSON object with keys being instance UUIDs and values being the JSON representation of the individual instances.
Returns a new iterator or NULL on error.
-
void dlite_json_iter_free(DLiteJsonIter *iter)#
Free’s iterator created with dlite_json_iter_create().
-
const char *dlite_json_next(DLiteJsonIter *iter, int *length)#
Search for instances in the JSON document provided to dlite_json_iter_create() and returns a pointer to instance UUIDs.
iter
should be an iterator created with dlite_json_iter_create().If
length
is given, it is set to the length of the returned identifier.Returns a pointer to the next matching UUID or NULL if there are no more matches left.
JSON store
-
typedef struct _DLiteJStoreIter DLiteJStoreIter#
Opaque iterator struct
-
DLiteJsonFormat dlite_jstore_loads(JStore *js, const char *src, int len)#
Load content of json string
src
to json storejs
.len
is the length ofsrc
.Returns json format or -1 on error.
-
DLiteJsonFormat dlite_jstore_loadf(JStore *js, const char *filename)#
Read content of
filename
to json storejs
.Returns json format or -1 on error.
-
int dlite_jstore_add(JStore *js, const DLiteInstance *inst, DLiteJsonFlag flags)#
Add json representation of
inst
to json storejs
.Returns non-zero on error.
-
int dlite_jstore_remove(JStore *js, const char *id)#
Removes instance with given id from json store
js
.Returns non-zero on error.
-
DLiteInstance *dlite_jstore_get(JStore *js, const char *id)#
Returns instance with given id from json store
js
or NULL on error.
-
DLiteJStoreIter *dlite_jstore_iter_create(JStore *js, const char *metaid)#
Initiate iterator
init
from json storejs
. Ifmetaid
is provided, the iterator will only iterate over instances of this metadata.Returns a new iterator or NULL on error.
-
int dlite_jstore_iter_free(DLiteJStoreIter *iter)#
Deinitialises iterater.
Return non-zero on error.
-
const char *dlite_jstore_iter_next(DLiteJStoreIter *iter)#
Return the id of the next instance in the json store or NULL if the iterator is exausted.
Serilisation
-
int dlite_json_sprint(char *dest, size_t size, const DLiteInstance *inst, int indent, DLiteJsonFlag flags)#
Serialise instance
inst
todest
, formatted as JSON.No more than
size
bytes are written todest
(incl. the terminating NUL).Returns number of bytes written to
dest
. If the output is truncated because it exceedssize
, the number of bytes that would have been written ifsize
was large enough is returned. On error, a negative value is returned.
-
int dlite_json_asprint(char **dest, size_t *size, size_t pos, const DLiteInstance *inst, int indent, DLiteJsonFlag flags)#
Like dlite_json_sprint(), but prints to allocated buffer.
Prints to position
pos
in*dest
, which should point to a buffer of size*size
. Bytes at position less thanpos
are not changed.If
*dest
is NULL or*size
is less than needed,*dest
is reallocated and*size
updated to the new buffer size.If
pos
is larger than*size
the bytes at indexi
are initialized to space (’ ‘), where*size <= i < pos
.Returns number or bytes written (not including terminating NUL) or a negative number on error.
-
char *dlite_json_aprint(const DLiteInstance *inst, int indent, DLiteJsonFlag flags)#
Like dlite_sprint(), but returns allocated buffer with serialised instance.
-
int dlite_json_fprint(FILE *fp, const DLiteInstance *inst, int indent, DLiteJsonFlag flags)#
Like dlite_sprint(), but prints to stream
fp
.Returns number or bytes printed or a negative number on error.
-
int dlite_json_print(const DLiteInstance *inst)#
Prints json representation of
inst
to standard output.Returns number or bytes printed or a negative number on error.
-
int dlite_json_printfile(const char *filename, const DLiteInstance *inst, DLiteJsonFlag flags)#
Like dlite_json_sprint(), but prints the output to file
filename
.Returns number or bytes printed or a negative number on error.
-
int dlite_json_append(char **s, size_t *size, const DLiteInstance *inst, DLiteJsonFlag flags)#
Appends json representation of
inst
to json string pointed to by*s
.On input,
*s
should be a malloc’ed string representation of a json object. It will be reallocated as needed.*size
if the allocated size of*s
. It will be updated when*s
is realocated.Returns number or bytes inserted or a negative number on error.
Deserialisation
-
DLiteInstance *dlite_json_sscan(const char *src, const char *id, const char *metaid)#
Returns a new instance scanned from
src
.id
is the uri or uuid of the instance to load. Ifsrc
only contain one instance (of the required metadata),id
may be NULL.If
metaid
is not NULL, it should be the URI or UUID of the metadata of the returned instance. It is an error if no such instance exists in the source.Returns the instance or NULL on error.
-
DLiteInstance *dlite_json_fscan(FILE *fp, const char *id, const char *metaid)#
Like dlite_sscan(), but scans instance
id
from streamfp
instead of a string.Returns the instance or NULL on error.
-
DLiteInstance *dlite_json_scanfile(const char *filename, const char *id, const char *metaid)#
Like dlite_json_sscan(), but scans instance
id
from filefilename
instead of a string.Returns the instance or NULL on error.
Checking
-
DLiteJsonFormat dlite_json_check(const char *src, const jsmntok_t *tokens, const char *id, DLiteJsonFlag *flags)#
Check format of a parsed JSON string.
src
is the JSON string to check.tokens
should be a parsed set of JSMN tokens corresponding tosrc
.If
id
is not NULL, it is used to select what instance in a multi-entity formatted JSON string that will be used to assign flags. If NULL, the first instance will be used.If
flags
is not NULL, the formatting (of the first entry in case of multi-entity format) will be investigated andflags
set accordingly.Return the format of
src
or -1 on error.
-
DLiteJsonFormat dlite_json_scheck(const char *src, size_t len, const char *id, DLiteJsonFlag *flags)#
Like dlite_json_check(), but checks string
src
with lengthlen
.Return the json format or -1 on error.
-
DLiteJsonFormat dlite_json_fcheck(FILE *fp, const char *id, DLiteJsonFlag *flags)#
Like dlite_json_scheck(), but checks the content of stream
fp
instead.Return the json format or -1 on error.
-
DLiteJsonFormat dlite_json_checkfile(const char *filename, const char *id, DLiteJsonFlag *flags)#
Like dlite_json_scheck(), but checks the file
filename
instead.Return the json format or -1 on error.
Enums
-
enum DLiteJsonFlag#
Flags for controlling serialisation
Values:
-
enumerator dliteJsonSingle#
Single-entity format
-
enumerator dliteJsonUriKey#
Use uri (if it exists) as json key in multi- entity format.
-
enumerator dliteJsonWithUuid#
Include uuid in output
-
enumerator dliteJsonWithMeta#
Always include “meta” (even for metadata)
-
enumerator dliteJsonArrays#
Write metadata dimension and properties as json arrays (old format)
-
enumerator dliteJsonNoParent#
Do not write transaction parent info
-
enumerator dliteJsonCompactRel#
Write relations with no newlines
-
enumerator dliteJsonSingle#