From b8c1c640cd375f2e2ccca1b18bf943f80ad04816 Mon Sep 17 00:00:00 2001 From: Chris Seaton Date: Wed, 7 Oct 2020 03:13:48 +0100 Subject: Fix an issue with generate_pretty and empty objects in the Ruby and Java implementations --- java/src/json/ext/Generator.java | 10 +++++----- lib/json/pure/generator.rb | 6 ++++-- tests/json_generator_test.rb | 5 +++++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/java/src/json/ext/Generator.java b/java/src/json/ext/Generator.java index 914d00e..fc17640 100644 --- a/java/src/json/ext/Generator.java +++ b/java/src/json/ext/Generator.java @@ -334,13 +334,13 @@ public final class Generator { buffer.append((byte)'{'); buffer.append(objectNl); - object.visitAll(new RubyHash.Visitor() { - private boolean firstPair = true; + final boolean[] firstPair = new boolean[]{true}; + object.visitAll(new RubyHash.Visitor() { @Override public void visit(IRubyObject key, IRubyObject value) { - if (firstPair) { - firstPair = false; + if (firstPair[0]) { + firstPair[0] = false; } else { buffer.append((byte)','); buffer.append(objectNl); @@ -360,7 +360,7 @@ public final class Generator { } }); state.decreaseDepth(); - if (objectNl.length() != 0) { + if (!firstPair[0] && objectNl.length() != 0) { buffer.append(objectNl); buffer.append(Utils.repeat(state.getIndent(), state.getDepth())); } diff --git a/lib/json/pure/generator.rb b/lib/json/pure/generator.rb index ef1c2e8..2257ee3 100644 --- a/lib/json/pure/generator.rb +++ b/lib/json/pure/generator.rb @@ -332,8 +332,10 @@ module JSON first = false } depth = state.depth -= 1 - result << state.object_nl - result << state.indent * depth if indent + unless first + result << state.object_nl + result << state.indent * depth if indent + end result << '}' result end diff --git a/tests/json_generator_test.rb b/tests/json_generator_test.rb index 77b539d..2ecdc97 100755 --- a/tests/json_generator_test.rb +++ b/tests/json_generator_test.rb @@ -92,6 +92,11 @@ EOT end def test_generate_pretty + json = pretty_generate({}) + assert_equal(<<'EOT'.chomp, json) +{ +} +EOT json = pretty_generate(@hash) # hashes aren't (insertion) ordered on every ruby implementation # assert_equal(@json3, json) -- cgit v1.2.1