SD-JSON(3) sd-json SD-JSON(3)

.SH "NAME" sd-json - APIs for Dealing with JSON Objects

.SH "SYNOPSIS"

```
#include <systemd/sd-json.h>
```

.HP 912u

**pkg-config --cflags --libs libsystemd**

.SH "DESCRIPTION"

.PP sd-json.h is part of [**libsystemd**(3)](/man/os/systemd/libsystemd.3) and provides APIs to parse, generate, format and otherwise operate with JSON objects.

.PP The API's central data structure is **JsonVariant** which encapsulates a JSON object, array, string, boolean, number or null value. These data structures are mostly considered immutable after construction (i.e. their contents will not change, but some meta-data might, such as reference counters).

.PP The APIs broadly fall into five categories:

•APIs to directly operate with **JsonVariant** objects, in the **sd\_json\_variant\*** namespace.

•APIs to construct complex JSON objects, in the **sd\_json\_build\*** namespace.

•APIs to map **JsonVariant** objects and their fields to matching fields in C structures, in the **sd\_json\_dispatch\*** namespace.

•APIs to convert a string representation of a JSON object into a **JsonVariant** object, in the **sd\_json\_parse\*** namespace.

•APIs to convert an **JsonVariant** object into its string representation, in the **sd\_json\_format\*** namespace.

.PP This JSON library will internally encode JSON integer numbers in the range **INT64\_MIN**...**UINT64\_MAX** into native 64bit signed or unsigned integers, and will reproduce them without loss of precision. Non-integer numbers are stored in 64bit IEEE floating point numbers.

.PP If the functions return string arrays, these are generally **NULL** terminated and need to be freed by the caller with the libc [**free**(3)](/man/os/systemd/free.3) call after use, including the strings referenced therein. Similarly, individual strings returned need to be freed, as well.

.PP As a special exception, instead of an empty string array **NULL** may be returned, which should be treated equivalent to an empty string array.

.SH "NOTES"

.PP Functions described here are available as a shared library, which can be compiled against and linked to with the **libsystemd** [**pkg-config**(1)](/man/os/systemd/pkg-config.1) file.

.PP The code described here uses [**getenv**(3)](/man/os/systemd/getenv.3), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/man/os/systemd/setenv.3) from a parallel thread. It is recommended to only do calls to **setenv()** from an early phase of the program when no other threads have been started.

.SH "SEE ALSO"

.PP [**systemd**(1)](/man/os/systemd/systemd.1), [**sd-varlink**(3)](/man/os/systemd/sd-varlink.3), [**pkg-config**(1)](/man/os/systemd/pkg-config.1)

systemd 262.2

---

Document: sd-json(3) from systemd 262.2-r1 (Chainguard OS)
Source: https://github.com/systemd/systemd
