diff --git a/java/src/json/ext/Generator.java b/java/src/json/ext/Generator.java index 914d00e7..fc176403 100644 --- a/java/src/json/ext/Generator.java +++ b/java/src/json/ext/Generator.java @@ -334,13 +334,13 @@ void generate(final Session session, RubyHash object, 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 void visit(IRubyObject key, IRubyObject value) { } }); 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 ef1c2e88..2257ee34 100644 --- a/lib/json/pure/generator.rb +++ b/lib/json/pure/generator.rb @@ -332,8 +332,10 @@ def json_transform(state) 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 77b539dc..2ecdc972 100755 --- a/tests/json_generator_test.rb +++ b/tests/json_generator_test.rb @@ -92,6 +92,11 @@ def test_generate 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)