JsonGenerator

## JsonGenerator JsonGenerator — Generates JSON data streams |

## Synopsis

    struct              JsonGenerator;
    struct              JsonGeneratorClass;
    JsonGenerator *     json_generator_new                  (void);
    void                json_generator_set_root             (JsonGenerator *generator,
                                                             JsonNode *node);
    JsonNode *          json_generator_get_root             (JsonGenerator *generator);
    void                json_generator_set_pretty           (JsonGenerator *generator,
                                                             gboolean is_pretty);
    gboolean            json_generator_get_pretty           (JsonGenerator *generator);
    void                json_generator_set_indent           (JsonGenerator *generator,
                                                             guint indent_level);
    guint               json_generator_get_indent           (JsonGenerator *generator);
    void                json_generator_set_indent_char      (JsonGenerator *generator,
                                                             gunichar indent_char);
    gunichar            json_generator_get_indent_char      (JsonGenerator *generator);

    gboolean            json_generator_to_file              (JsonGenerator *generator,
                                                             const gchar *filename,
                                                             GError **error);
    gchar *             json_generator_to_data              (JsonGenerator *generator,
                                                             gsize *length);
    gboolean            json_generator_to_stream            (JsonGenerator *generator,
                                                             GOutputStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);

## Object Hierarchy

      GObject
       +----JsonGenerator

## Properties

      "indent"                   guint                 : Read / Write
      "indent-char"              guint                 : Read / Write
      "pretty"                   gboolean              : Read / Write
      "root"                     JsonNode*             : Read / Write

## Description

JsonGenerator provides an object for generating a JSON data stream and put it into a buffer or a file.

## Details

### struct JsonGenerator

    struct JsonGenerator;

JSON data streams generator. The contents of the JsonGenerator structure are private and should only be accessed via the provided API.

### struct JsonGeneratorClass

    struct JsonGeneratorClass {
    };

JsonGenerator class

### json_generator_new ()

    JsonGenerator *     json_generator_new                  (void);

Creates a new JsonGenerator. You can use this object to generate a JSON data stream starting from a data object model composed by JsonNodes.

Returns : | the newly created JsonGenerator instance

### json_generator_set_root ()

    void                json_generator_set_root             (JsonGenerator *generator,
                                                             JsonNode *node);

Sets `node` as the root of the JSON data stream to be serialized by the JsonGenerator.

### Note

The node is copied by the generator object, so it can be safely freed after calling this function.

`generator` : | a JsonGenerator
`node` : | a JsonNode

### json_generator_get_root ()

    JsonNode *          json_generator_get_root             (JsonGenerator *generator);

Retrieves a pointer to the root JsonNode set using `json_generator_set_root()`.

`generator` : | a JsonGenerator
Returns : | a JsonNode, or `NULL`. The returned node is owned by the JsonGenerator and it should not be freed. [transfer none]

Since 0.14

### json_generator_set_pretty ()

    void                json_generator_set_pretty           (JsonGenerator *generator,
                                                             gboolean is_pretty);

Sets whether the generated JSON should be pretty printed, using the indentation character specified in the "indent-char" property and the spacing specified in "indent" property.

`generator` : | a JsonGenerator
`is_pretty` : | whether the generated string should be pretty printed

Since 0.14

### json_generator_get_pretty ()

    gboolean            json_generator_get_pretty           (JsonGenerator *generator);

Retrieves the value set using `json_generator_set_pretty()`.

`generator` : | a JsonGenerator
Returns : | `TRUE` if the generated JSON should be pretty-printed, and `FALSE` otherwise

Since 0.14

### json_generator_set_indent ()

    void                json_generator_set_indent           (JsonGenerator *generator,
                                                             guint indent_level);

Sets the number of repetitions for each indentation level.

`generator` : | a JsonGenerator
`indent_level` : | the number of repetitions of the indentation character that should be applied when pretty printing

Since 0.14

### json_generator_get_indent ()

    guint               json_generator_get_indent           (JsonGenerator *generator);

Retrieves the value set using `json_generator_set_indent()`.

`generator` : | a JsonGenerator
Returns : | the number of repetitions per indentation level

Since 0.14

### json_generator_set_indent_char ()

    void                json_generator_set_indent_char      (JsonGenerator *generator,
                                                             gunichar indent_char);

Sets the character to be used when indenting

`generator` : | a JsonGenerator
`indent_char` : | a Unicode character to be used when indenting

Since 0.14

### json_generator_get_indent_char ()

    gunichar            json_generator_get_indent_char      (JsonGenerator *generator);

Retrieves the value set using `json_generator_set_indent_char()`.

`generator` : | a JsonGenerator
Returns : | the character to be used when indenting

Since 0.14

### json_generator_to_file ()

    gboolean            json_generator_to_file              (JsonGenerator *generator,
                                                             const gchar *filename,
                                                             GError **error);

Creates a JSON data stream and puts it inside `filename`, overwriting the current file contents. This operation is atomic.

`generator` : | a JsonGenerator
`filename` : | path to the target file
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` if saving was successful.

### json_generator_to_data ()

    gchar *             json_generator_to_data              (JsonGenerator *generator,
                                                             gsize *length);

Generates a JSON data stream from `generator` and returns it as a buffer.

`generator` : | a JsonGenerator
`length` : | return location for the length of the returned buffer, or `NULL`. [out]
Returns : | a newly allocated buffer holding a JSON data stream. Use `g_free()` to free the allocated resources.

### json_generator_to_stream ()

    gboolean            json_generator_to_stream            (JsonGenerator *generator,
                                                             GOutputStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);

Outputs JSON data and streams it (synchronously) to `stream`.

`generator` : | a JsonGenerator
`stream` : | a GOutputStream
`cancellable` : | a GCancellable, or `NULL`. [allow-none]
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` if the write operation was successful, and `FALSE` on failure. In case of error, the GError will be filled accordingly

Since 0.12

## Property Details

### The `"indent"` property

      "indent"                   guint                 : Read / Write

Number of spaces to be used to indent when pretty printing.

Default value: 2

### The `"indent-char"` property

      "indent-char"              guint                 : Read / Write

The character that should be used when indenting in pretty print.

Default value: ' '

Since 0.6

### The `"pretty"` property

      "pretty"                   gboolean              : Read / Write

Whether the output should be "pretty-printed", with indentation and newlines. The indentation level can be controlled by using the JsonGenerator:indent property

Default value: FALSE

### The `"root"` property

      "root"                     JsonNode*             : Read / Write

The root JsonNode to be used when constructing a JSON data stream.

Since 0.4