Top | ![]() |
![]() |
![]() |
![]() |
A JsonNode is a generic container of elements inside a JSON stream. It can contain fundamental types (integers, booleans, floating point numbers, strings) and complex types (arrays and objects).
When parsing a JSON data stream you extract the root node and walk
the node tree by retrieving the type of data contained inside the
node with the JSON_NODE_TYPE
macro. If the node contains a fundamental
type you can retrieve a copy of the GValue holding it with the
json_node_get_value()
function, and then use the GValue API to extract
the data; if the node contains a complex type you can retrieve the
JsonObject or the JsonArray using json_node_get_object()
or
json_node_get_array()
respectively, and then retrieve the nodes
they contain.
#define JSON_NODE_TYPE(node) (json_node_get_node_type ((node)))
Evaluates to the JsonNodeType contained by node
#define JSON_NODE_HOLDS(node,t) (json_node_get_node_type ((node)) == (t))
Evaluates to TRUE
if the node
holds type t
Since 0.10
#define JSON_NODE_HOLDS_VALUE(node) (JSON_NODE_HOLDS ((node), JSON_NODE_VALUE))
Evaluates to TRUE
if node
holds a JSON_NODE_VALUE
Since 0.10
#define JSON_NODE_HOLDS_OBJECT(node) (JSON_NODE_HOLDS ((node), JSON_NODE_OBJECT))
Evaluates to TRUE
if node
holds a JSON_NODE_OBJECT
Since 0.10
#define JSON_NODE_HOLDS_ARRAY(node) (JSON_NODE_HOLDS ((node), JSON_NODE_ARRAY))
Evaluates to TRUE
if node
holds a JSON_NODE_ARRAY
Since 0.10
#define JSON_NODE_HOLDS_NULL(node) (JSON_NODE_HOLDS ((node), JSON_NODE_NULL))
Evaluates to TRUE
if node
holds a JSON_NODE_NULL
Since 0.10
JsonNode *
json_node_alloc (void
);
Allocates a new JsonNode. Use json_node_init()
and its variants
to initialize the returned value.
the newly allocated JsonNode. Use
json_node_free()
to free the resources allocated by this function.
[transfer full]
Since 0.16
JsonNode * json_node_init (JsonNode *node
,JsonNodeType type
);
Initializes a node
to a specific type
.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode * json_node_init_int (JsonNode *node
,gint64 value
);
Initializes node
to JSON_NODE_VALUE
and sets value
into it.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode * json_node_init_double (JsonNode *node
,gdouble value
);
Initializes node
to JSON_NODE_VALUE
and sets value
into it.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode * json_node_init_boolean (JsonNode *node
,gboolean value
);
Initializes node
to JSON_NODE_VALUE
and sets value
into it.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode * json_node_init_string (JsonNode *node
,const char *value
);
Initializes node
to JSON_NODE_VALUE
and sets value
into it.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode *
json_node_init_null (JsonNode *node
);
Initializes node
to JSON_NODE_NULL
.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode * json_node_init_object (JsonNode *node
,JsonObject *object
);
Initializes node
to JSON_NODE_OBJECT
and sets object
into it.
This function will take a reference on object
.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
node |
the JsonNode to initialize |
|
object |
the JsonObject to initialize |
[allow-none] |
Since 0.16
JsonNode * json_node_init_array (JsonNode *node
,JsonArray *array
);
Initializes node
to JSON_NODE_ARRAY
and sets array
into it.
This function will take a reference on array
.
If the node has already been initialized once, it will be reset to the given type, and any data contained will be cleared.
Since 0.16
JsonNode *
json_node_new (JsonNodeType type
);
Creates a new JsonNode of type
.
This is a convenience function for json_node_alloc()
and json_node_init()
,
and it's the equivalent of:
1 |
json_node_init (json_node_alloc (), type); |
JsonNode *
json_node_copy (JsonNode *node
);
Copies node
. If the node contains complex data types then the reference
count of the objects is increased.
void json_node_set_array (JsonNode *node
,JsonArray *array
);
Sets array
inside node
and increases the JsonArray reference count
void json_node_take_array (JsonNode *node
,JsonArray *array
);
Sets array
into node
without increasing the JsonArray reference count.
JsonArray *
json_node_dup_array (JsonNode *node
);
Retrieves the JsonArray stored inside a JsonNode and returns it with its reference count increased by one.
void json_node_set_object (JsonNode *node
,JsonObject *object
);
Sets objects
inside node
. The reference count of object
is increased.
void json_node_take_object (JsonNode *node
,JsonObject *object
);
Sets object
inside node
. The reference count of object
is not increased.
JsonObject *
json_node_get_object (JsonNode *node
);
Retrieves the JsonObject stored inside a JsonNode
JsonObject *
json_node_dup_object (JsonNode *node
);
Retrieves the JsonObject inside node
. The reference count of
the returned object is increased.
void json_node_set_value (JsonNode *node
,const GValue *value
);
Sets value
inside node
. The passed GValue is copied into the JsonNode
void json_node_get_value (JsonNode *node
,GValue *value
);
Retrieves a value from a JsonNode and copies into value
. When done
using it, call g_value_unset()
on the GValue.
void json_node_set_boolean (JsonNode *node
,gboolean value
);
Sets value
as the boolean content of the node
, replacing any existing
content.
gboolean
json_node_get_boolean (JsonNode *node
);
Gets the boolean value stored inside a JsonNode
void json_node_set_double (JsonNode *node
,gdouble value
);
Sets value
as the double content of the node
, replacing any existing
content.
gdouble
json_node_get_double (JsonNode *node
);
Gets the double value stored inside a JsonNode
void json_node_set_int (JsonNode *node
,gint64 value
);
Sets value
as the integer content of the node
, replacing any existing
content.
gint64
json_node_get_int (JsonNode *node
);
Gets the integer value stored inside a JsonNode
void json_node_set_string (JsonNode *node
,const gchar *value
);
Sets value
as the string content of the node
, replacing any existing
content.
const gchar *
json_node_get_string (JsonNode *node
);
Gets the string value stored inside a JsonNode
gchar *
json_node_dup_string (JsonNode *node
);
Gets a copy of the string value stored inside a JsonNode
a newly allocated string containing a copy
of the JsonNode contents. Use g_free()
to free the allocated resources.
[transfer full]
void json_node_set_parent (JsonNode *node
,JsonNode *parent
);
Sets the parent JsonNode of node
Since 0.8
JsonNode *
json_node_get_parent (JsonNode *node
);
Retrieves the parent JsonNode of node
.
const gchar *
json_node_type_name (JsonNode *node
);
Retrieves the user readable name of the data type contained by node
.
GType
json_node_get_value_type (JsonNode *node
);
Returns the GType of the payload of the node.
Since 0.4
JsonNodeType
json_node_get_node_type (JsonNode *node
);
Retrieves the JsonNodeType of node
Since 0.8
gboolean
json_node_is_null (JsonNode *node
);
Checks whether node
is a JSON_NODE_NULL
.
A JSON_NODE_NULL
node is not the same as a NULL
JsonNode; a
JSON_NODE_NULL
represents a 'null' value in the JSON tree.
Since 0.8
Indicates the content of a JsonNode.
The node contains a JsonObject |
||
The node contains a JsonArray |
||
The node contains a fundamental type |
||
Special type, for nodes containing null |
typedef struct _JsonNode JsonNode;
A generic container of JSON data types. The contents of the JsonNode structure are private and should only be accessed via the provided functions and never directly.