json.node

Module for [Node] class

class Node

Types 1

A generic container of JSON data types.

[json.node.Node] 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 [gobject.value.Value] holding it with the [json.node.Node.getValue] function, and then use the [gobject.value.Value] API to extract the data; if the node contains a complex type you can retrieve the [json.object.ObjectWrap] or the [json.array.Array] using [json.node.Node.getObject] or [json.node.Node.getArray] respectively, and then retrieve the nodes they contain.

A [json.node.Node] may be marked as immutable using [json.node.Node.seal]. This marks the node and all its descendents as read-only, and means that subsequent calls to setter functions (such as [json.node.Node.setArray]) on them will abort as a programmer error. By marking a node tree as immutable, it may be referenced in multiple places and its hash value cached for fast lookups, without the possibility of a value deep within the tree changing and affecting hash values. Immutable nodes may be passed to functions which retain a reference to them without needing to take a copy.

A [json.node.Node] supports two types of memory management: malloc/free semantics, and reference counting semantics. The two may be mixed to a limited extent: nodes may be allocated (which gives them a reference count of 1), referenced one or more times, unreferenced exactly that number of times (using [json.node.Node.unref]), then either unreferenced exactly once more or freed (using [json.node.Node.free]) to destroy them. The [json.node.Node.free] function must not be used when a node might have a reference count not equal to 1. To this end, JSON-GLib uses [json.node.Node.copy] and [json.node.Node.unref] internally.

Methods
void * _cPtr(Flag!"Dup" dup = No.Dup)
GType _gType() @property
Node self()Returns `this`, for use in `with` statements.
json.node.Node alloc()Allocates a new, uninitialized node.
json.node.Node copy()Copies node.
json.array.Array dupArray()Retrieves the JSON array inside node.
json.object.ObjectWrap dupObject()Retrieves the object inside node.
string dupString()Gets a copy of the string value stored inside a node.
bool equal(json.node.Node b)Check whether `a` and `b` are equal node, meaning they have the same type and same values (checked recursively).
json.array.Array getArray()Retrieves the JSON array stored inside a node.
bool getBoolean()Gets the boolean value stored inside a node.
double getDouble()Gets the double value stored inside a node.
long getInt()Gets the integer value stored inside a node.
json.types.NodeType getNodeType()Retrieves the type of a node. Returns: the type of the node
json.object.ObjectWrap getObject()Retrieves the object stored inside a node.
json.node.Node getParent()Retrieves the parent node of the given node. Returns: the parent node, or `NULL` if node is the root node
string getString()Gets the string value stored inside a node.
void getValue(out gobject.value.Value value)Retrieves a value from a node and copies into value.
gobject.types.GType getValueType()Returns the `GType` of the payload of the node.
uint hash()Calculate a hash value for the given key.
json.node.Node init_(json.types.NodeType type)Initializes a node to a specific type.
json.node.Node initArray(json.array.Array array = null)Initializes node to [json.types.NodeType.Array] and sets array into it.
json.node.Node initBoolean(bool value)Initializes node to [json.types.NodeType.Value] and sets value into it.
json.node.Node initDouble(double value)Initializes node to [json.types.NodeType.Value] and sets value into it.
json.node.Node initInt(long value)Initializes node to [json.types.NodeType.Value] and sets value into it.
json.node.Node initNull()Initializes node to [json.types.NodeType.Null].
json.node.Node initObject(json.object.ObjectWrap object = null)Initializes node to [json.types.NodeType.Object] and sets object into it.
json.node.Node initString(string value = null)Initializes node to [json.types.NodeType.Value] and sets value into it.
bool isImmutable()Check whether the given node has been marked as immutable by calling [json.node.Node.seal] on it. Returns: `TRUE` if the node is immutable
bool isNull()Checks whether node is a [json.types.NodeType.Null].
void seal()Seals the given node, making it immutable to further changes.
void setArray(json.array.Array array)Sets array inside node.
void setBoolean(bool value)Sets value as the boolean content of the node, replacing any existing content.
void setDouble(double value)Sets value as the double content of the node, replacing any existing content.
void setInt(long value)Sets value as the integer content of the node, replacing any existing content.
void setObject(json.object.ObjectWrap object = null)Sets objects inside node.
void setParent(json.node.Node parent = null)Sets the parent node for the given `node`.
void setString(string value)Sets value as the string content of the node, replacing any existing content.
void setValue(gobject.value.Value value)Sets a scalar value inside the given node.
void takeArray(json.array.Array array)Sets array inside node.
void takeObject(json.object.ObjectWrap object)Sets object inside node.
string typeName()Retrieves the user readable name of the data type contained by node.
Constructors
this(void * ptr, Flag!"Take" take)
this(json.types.NodeType type)Creates a new node holding the given type.