summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Haszlakiewicz <erh+git@nimenees.com>2022-07-30 19:27:14 +0000
committerEric Haszlakiewicz <erh+git@nimenees.com>2022-07-30 19:27:14 +0000
commit9749b0cb66b32ddac4bbbca28dd9009968722a9f (patch)
treeb95232e9864cc3c81b9915b46d492c21da88e7ff
parent2e9b7456a5608efbd49fd4c4b51cb6ed7b63cc15 (diff)
downloadjson-c-9749b0cb66b32ddac4bbbca28dd9009968722a9f.tar.gz
When serializing with JSON_C_TO_STRING_PRETTY set, keep the opening and closing curly or square braces on same line for empty objects or arrays. Issue #778.
-rw-r--r--ChangeLog17
-rw-r--r--json_object.c22
-rw-r--r--tests/test1.c5
-rw-r--r--tests/test1.expected2
-rw-r--r--tests/test1Formatted_plain.expected2
-rw-r--r--tests/test1Formatted_pretty.expected4
-rw-r--r--tests/test1Formatted_spaced.expected2
-rw-r--r--tests/test1Formatted_spaced_pretty.expected4
-rw-r--r--tests/test1Formatted_spaced_pretty_pretty_tab.expected4
9 files changed, 42 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index b03a777..8cadae6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,21 @@
+0.17 (future release)
+========================================
+
+Deprecated and removed features:
+--------------------------------
+* ...
+
+New features
+------------
+* ...
+
+Significant changes and bug fixes
+---------------------------------
+* When serializing with JSON_C_TO_STRING_PRETTY set, keep the opening and
+ closing curly or square braces on same line for empty objects or arrays.
+
+
0.16 (up to commit 66dcdf5, 2022-04-13)
========================================
diff --git a/json_object.c b/json_object.c
index 581b1e2..14cd594 100644
--- a/json_object.c
+++ b/json_object.c
@@ -460,16 +460,14 @@ static int json_object_object_to_json_string(struct json_object *jso, struct pri
struct json_object_iter iter;
printbuf_strappend(pb, "{" /*}*/);
- if (flags & JSON_C_TO_STRING_PRETTY)
- printbuf_strappend(pb, "\n");
json_object_object_foreachC(jso, iter)
{
if (had_children)
{
printbuf_strappend(pb, ",");
- if (flags & JSON_C_TO_STRING_PRETTY)
- printbuf_strappend(pb, "\n");
}
+ if (flags & JSON_C_TO_STRING_PRETTY)
+ printbuf_strappend(pb, "\n");
had_children = 1;
if (flags & JSON_C_TO_STRING_SPACED && !(flags & JSON_C_TO_STRING_PRETTY))
printbuf_strappend(pb, " ");
@@ -485,10 +483,9 @@ static int json_object_object_to_json_string(struct json_object *jso, struct pri
else if (iter.val->_to_json_string(iter.val, pb, level + 1, flags) < 0)
return -1;
}
- if (flags & JSON_C_TO_STRING_PRETTY)
+ if ((flags & JSON_C_TO_STRING_PRETTY) && had_children)
{
- if (had_children)
- printbuf_strappend(pb, "\n");
+ printbuf_strappend(pb, "\n");
indent(pb, level, flags);
}
if (flags & JSON_C_TO_STRING_SPACED && !(flags & JSON_C_TO_STRING_PRETTY))
@@ -1381,17 +1378,15 @@ static int json_object_array_to_json_string(struct json_object *jso, struct prin
size_t ii;
printbuf_strappend(pb, "[");
- if (flags & JSON_C_TO_STRING_PRETTY)
- printbuf_strappend(pb, "\n");
for (ii = 0; ii < json_object_array_length(jso); ii++)
{
struct json_object *val;
if (had_children)
{
printbuf_strappend(pb, ",");
- if (flags & JSON_C_TO_STRING_PRETTY)
- printbuf_strappend(pb, "\n");
}
+ if (flags & JSON_C_TO_STRING_PRETTY)
+ printbuf_strappend(pb, "\n");
had_children = 1;
if (flags & JSON_C_TO_STRING_SPACED && !(flags & JSON_C_TO_STRING_PRETTY))
printbuf_strappend(pb, " ");
@@ -1402,10 +1397,9 @@ static int json_object_array_to_json_string(struct json_object *jso, struct prin
else if (val->_to_json_string(val, pb, level + 1, flags) < 0)
return -1;
}
- if (flags & JSON_C_TO_STRING_PRETTY)
+ if ((flags & JSON_C_TO_STRING_PRETTY) && had_children)
{
- if (had_children)
- printbuf_strappend(pb, "\n");
+ printbuf_strappend(pb, "\n");
indent(pb, level, flags);
}
diff --git a/tests/test1.c b/tests/test1.c
index 01796ab..befd246 100644
--- a/tests/test1.c
+++ b/tests/test1.c
@@ -311,6 +311,11 @@ int main(int argc, char **argv)
{
printf("\t%s: %s\n", key, json_object_to_json_string(val));
}
+
+ json_object *empty_array = json_object_new_array();
+ json_object *empty_obj = json_object_new_object();
+ json_object_object_add(my_object, "empty_array", empty_array);
+ json_object_object_add(my_object, "empty_obj", empty_obj);
printf("my_object.to_string()=%s\n", json_object_to_json_string(my_object));
json_object_put(my_array);
diff --git a/tests/test1.expected b/tests/test1.expected
index 4b6b252..b473a8b 100644
--- a/tests/test1.expected
+++ b/tests/test1.expected
@@ -75,4 +75,4 @@ my_object=
foo: "bar"
bool0: false
bool1: true
-my_object.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true }
+my_object.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true, "empty_array": [ ], "empty_obj": { } }
diff --git a/tests/test1Formatted_plain.expected b/tests/test1Formatted_plain.expected
index 128e274..ad12d99 100644
--- a/tests/test1Formatted_plain.expected
+++ b/tests/test1Formatted_plain.expected
@@ -75,4 +75,4 @@ my_object=
foo: "bar"
bool0: false
bool1: true
-my_object.to_string()={"abc":12,"foo":"bar","bool0":false,"bool1":true}
+my_object.to_string()={"abc":12,"foo":"bar","bool0":false,"bool1":true,"empty_array":[],"empty_obj":{}}
diff --git a/tests/test1Formatted_pretty.expected b/tests/test1Formatted_pretty.expected
index b67185f..ab2cc78 100644
--- a/tests/test1Formatted_pretty.expected
+++ b/tests/test1Formatted_pretty.expected
@@ -97,5 +97,7 @@ my_object.to_string()={
"abc":12,
"foo":"bar",
"bool0":false,
- "bool1":true
+ "bool1":true,
+ "empty_array":[],
+ "empty_obj":{}
}
diff --git a/tests/test1Formatted_spaced.expected b/tests/test1Formatted_spaced.expected
index fe6979d..f57bd05 100644
--- a/tests/test1Formatted_spaced.expected
+++ b/tests/test1Formatted_spaced.expected
@@ -75,4 +75,4 @@ my_object=
foo: "bar"
bool0: false
bool1: true
-my_object.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true }
+my_object.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true, "empty_array": [ ], "empty_obj": { } }
diff --git a/tests/test1Formatted_spaced_pretty.expected b/tests/test1Formatted_spaced_pretty.expected
index 104a554..c88729f 100644
--- a/tests/test1Formatted_spaced_pretty.expected
+++ b/tests/test1Formatted_spaced_pretty.expected
@@ -97,5 +97,7 @@ my_object.to_string()={
"abc": 12,
"foo": "bar",
"bool0": false,
- "bool1": true
+ "bool1": true,
+ "empty_array": [],
+ "empty_obj": {}
}
diff --git a/tests/test1Formatted_spaced_pretty_pretty_tab.expected b/tests/test1Formatted_spaced_pretty_pretty_tab.expected
index f9a8e87..bab239f 100644
--- a/tests/test1Formatted_spaced_pretty_pretty_tab.expected
+++ b/tests/test1Formatted_spaced_pretty_pretty_tab.expected
@@ -97,5 +97,7 @@ my_object.to_string()={
"abc": 12,
"foo": "bar",
"bool0": false,
- "bool1": true
+ "bool1": true,
+ "empty_array": [],
+ "empty_obj": {}
}