JSON GVariant Integration

JSON GVariant Integration — Serialize and deserialize GVariant types

Synopsis

#include <json-glib/json-glib.h>

JsonNode *          json_gvariant_serialize             (GVariant *variant);
gchar *             json_gvariant_serialize_data        (GVariant *variant,
                                                         gsize *length);
GVariant *          json_gvariant_deserialize           (JsonNode *json_node,
                                                         const gchar *signature,
                                                         GError **error);
GVariant *          json_gvariant_deserialize_data      (const gchar *json,
                                                         gssize length,
                                                         const gchar *signature,
                                                         GError **error);

Description

Use json_gvariant_serialize() and json_gvariant_serialize_data() to convert from any GVariant value to a JsonNode tree or its string representation.

Use json_gvariant_deserialize() and json_gvariant_deserialize_data() to obtain the GVariant value from a JsonNode tree or directly from a JSON string.

Since many GVariant data types cannot be directly represented as JSON, a GVariant type string (signature) should be provided to these methods in order to obtain a correct, type-contrained result. If no signature is provided, conversion can still be done, but the resulting GVariant value will be "guessed" from the JSON data types using the following rules:

## Strings JSON strings map to GVariant `(s)`.

## Integers JSON integers map to GVariant int64 `(x)`.

## Booleans JSON booleans map to GVariant boolean `(b)`.

## Numbers JSON numbers map to GVariant double `(d)`.

## Arrays JSON arrays map to GVariant arrays of variants `(av)`.

## Objects JSON objects map to GVariant dictionaries of string to variants `(a{sv})`.

## Null values JSON null values map to GVariant maybe variants `(mv)`.

Details

json_gvariant_serialize ()

JsonNode *          json_gvariant_serialize             (GVariant *variant);

Converts variant to a JSON tree.

variant :

A GVariant to convert

Returns :

A JsonNode representing the root of the JSON data structure obtained from variant. [transfer full]

Since 0.14


json_gvariant_serialize_data ()

gchar *             json_gvariant_serialize_data        (GVariant *variant,
                                                         gsize *length);

Converts variant to its JSON encoded string representation. This method is actually a helper function. It uses json_gvariant_serialize() to obtain the JSON tree, and then JsonGenerator to stringify it.

variant :

A GVariant to convert

length :

Return location for the length of the returned string, or NULL. [out][allow-none]

Returns :

The JSON encoded string corresponding to variant. [transfer full]

Since 0.14


json_gvariant_deserialize ()

GVariant *          json_gvariant_deserialize           (JsonNode *json_node,
                                                         const gchar *signature,
                                                         GError **error);

Converts a JSON data structure to a GVariant value using signature to resolve ambiguous data types. If no error occurs, the resulting GVariant is guaranteed to conform to signature.

If signature is not NULL but does not represent a valid GVariant type string, NULL is returned and error is set to G_IO_ERROR_INVALID_ARGUMENT. If a signature is provided but the JSON structure cannot be mapped to it, NULL is returned and error is set to G_IO_ERROR_INVALID_DATA. If signature is NULL, the conversion is done based strictly on the types in the JSON nodes.

The returned variant has a floating reference that will need to be sunk by the caller code.

json_node :

A JsonNode to convert

signature :

A valid GVariant type string, or NULL. [allow-none]

error :

A pointer to a GError

Returns :

A newly created, floating GVariant compliant with signature, or NULL on error. [transfer none]

Since 0.14


json_gvariant_deserialize_data ()

GVariant *          json_gvariant_deserialize_data      (const gchar *json,
                                                         gssize length,
                                                         const gchar *signature,
                                                         GError **error);

Converts a JSON string to a GVariant value. This method works exactly like json_gvariant_deserialize(), but takes a JSON encoded string instead. The string is first converted to a JsonNode using JsonParser, and then json_gvariant_deserialize() is called.

The returned variant has a floating reference that will need to be sunk by the caller code.

json :

A JSON data string

length :

The length of json, or -1 if NULL-terminated

signature :

A valid GVariant type string, or NULL. [allow-none]

error :

A pointer to a GError

Returns :

A newly created, floating GVariant compliant with signature, or NULL on error. [transfer none]

Since 0.14