summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2020-10-20 21:33:52 +0900
committerGitHub <noreply@github.com>2020-10-20 21:33:52 +0900
commit01e4823ee1b9837d7289ae4eb35c9d74535e0f5e (patch)
treefba7e360e7768522e7569a7c07bee4c72e6bfc50
parent07c34048ff758c81be9d8b30f5d63084e5e9e072 (diff)
parentb8c1c640cd375f2e2ccca1b18bf943f80ad04816 (diff)
downloadjson-01e4823ee1b9837d7289ae4eb35c9d74535e0f5e.tar.gz
Merge pull request #449 from chrisseaton/pretty-empty
Fix an issue with generate_pretty and empty objects in the Ruby and Java implementations
-rw-r--r--java/src/json/ext/Generator.java10
-rw-r--r--lib/json/pure/generator.rb6
-rwxr-xr-xtests/json_generator_test.rb5
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)