---
name: "sd-json"
section: "3"
platform: "linux"
package: "systemd-libs"
version: "262.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sd-json"
---

# sd-json(3)

APIs for Dealing with JSON Objects

## NAME

sd-json - APIs for Dealing with JSON Objects

## SYNOPSIS

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

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

## DESCRIPTION

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

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).

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.

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.

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

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

## NOTES

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

The code described here uses [**getenv**(3)](/getenv/3.md), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/setenv/3.md) 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.

## SEE ALSO

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