summaryrefslogtreecommitdiff
path: root/json-glib/json-generator.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2020-08-24 16:19:59 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2020-08-24 17:51:57 +0100
commit55f4392952772aac74c40c30377a8dd899ac2b88 (patch)
tree95d744f8ce4e38ca0449874a453d63a7ea45177c /json-glib/json-generator.c
parentf24bc0f561c4e966006b0ad5cb51f230a69617c1 (diff)
downloadjson-glib-55f4392952772aac74c40c30377a8dd899ac2b88.tar.gz
Gracefully handle empty arrays and objects
Don't pretty print newlines. This requires a change in the generator test, but the pretty printing format is not stable anyway, so we can get away with it.
Diffstat (limited to 'json-glib/json-generator.c')
-rw-r--r--json-glib/json-generator.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/json-glib/json-generator.c b/json-glib/json-generator.c
index 346be65..4ccf320 100644
--- a/json-glib/json-generator.c
+++ b/json-glib/json-generator.c
@@ -394,13 +394,16 @@ dump_array (JsonGenerator *generator,
g_string_append_c (buffer, '[');
- if (pretty)
- g_string_append_c (buffer, '\n');
+ if (array_len == 0)
+ goto out;
for (i = 0; i < array_len; i++)
{
JsonNode *cur = json_array_get_element (array, i);
+ if (i == 0 && pretty)
+ g_string_append_c (buffer, '\n');
+
dump_node (generator, buffer, level + 1, NULL, cur);
if ((i + 1) != array_len)
@@ -416,6 +419,7 @@ dump_array (JsonGenerator *generator,
g_string_append_c (buffer, priv->indent_char);
}
+out:
g_string_append_c (buffer, ']');
}
@@ -434,9 +438,6 @@ dump_object (JsonGenerator *generator,
g_string_append_c (buffer, '{');
- if (pretty)
- g_string_append_c (buffer, '\n');
-
members = json_object_get_members_internal (object);
for (l = members->head; l != NULL; l = l->next)
@@ -444,6 +445,9 @@ dump_object (JsonGenerator *generator,
const gchar *member_name = l->data;
JsonNode *cur = json_object_get_member (object, member_name);
+ if (l->prev == NULL && pretty)
+ g_string_append_c (buffer, '\n');
+
dump_node (generator, buffer, level + 1, member_name, cur);
if (l->next != NULL)