You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by cc...@apache.org on 2015/09/13 11:32:04 UTC

[2/2] incubator-groovy git commit: Support for unescaped output in StreamingJsonBuilder

Support for unescaped output in StreamingJsonBuilder

Closes #95


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/c5c0cefb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/c5c0cefb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/c5c0cefb

Branch: refs/heads/GROOVY_2_4_X
Commit: c5c0cefb365b6a4c00335abeeed124cc8356a4c8
Parents: 0bf2cb5
Author: Graeme Rocher <gr...@gmail.com>
Authored: Tue Aug 25 16:57:45 2015 +0200
Committer: Cedric Champeau <cc...@apache.org>
Committed: Sun Sep 13 11:31:26 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/groovy/json/JsonOutput.java   | 32 ++++++++++++++++++++
 .../java/groovy/json/StreamingJsonBuilder.java  | 12 ++++++++
 .../groovy/json/StreamingJsonBuilderTest.groovy | 10 ++++++
 3 files changed, 54 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/c5c0cefb/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java b/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java
index 503f79c..b9a4e4b 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/JsonOutput.java
@@ -291,6 +291,8 @@ public class JsonOutput {
                 buffer.addJsonEscapedString(object.toString());
             } else if (objectClass == UUID.class) {
                 buffer.addQuoted(object.toString());
+            } else if (objectClass == JsonUnescaped.class) {
+                buffer.add(object.toString());
             } else if (Closure.class.isAssignableFrom(objectClass)) {
                 writeMap(JsonDelegate.cloneDelegateAndGetContent((Closure<?>) object), buffer);
             } else if (Expando.class.isAssignableFrom(objectClass)) {
@@ -567,4 +569,34 @@ public class JsonOutput {
         return indent;
     }
 
+    /**
+     * Obtains JSON unescaped text for the given text
+     *
+     * @param text The text
+     * @return The unescaped text
+     */
+    public static JsonUnescaped unescaped(CharSequence text) {
+        return new JsonUnescaped(text);
+    }
+
+    /**
+     * Represents unescaped JSON
+     */
+    public static class JsonUnescaped {
+        private CharSequence text;
+
+        public JsonUnescaped(CharSequence text) {
+            this.text = text;
+        }
+
+        public CharSequence getText() {
+            return text;
+        }
+
+        @Override
+        public String toString() {
+            return text.toString();
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/c5c0cefb/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java b/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
index e9da080..f96d8f6 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
@@ -545,6 +545,18 @@ public class StreamingJsonBuilder extends GroovyObjectSupport {
             writeValue(value);
         }
 
+        /**
+         * Writes an unescaped value. Note: can cause invalid JSON if passed JSON is invalid
+         *
+         * @param name The attribute name
+         * @param json The value
+         * @throws IOException
+         */
+        public void call(String name, JsonOutput.JsonUnescaped json) throws IOException {
+            writeName(name);
+            writer.write(json.toString());
+        }
+
 
         private void writeObjects(Collection coll, @DelegatesTo(StreamingJsonDelegate.class) Closure c) throws IOException {
             verifyValue();

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/c5c0cefb/subprojects/groovy-json/src/test/groovy/groovy/json/StreamingJsonBuilderTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-json/src/test/groovy/groovy/json/StreamingJsonBuilderTest.groovy b/subprojects/groovy-json/src/test/groovy/groovy/json/StreamingJsonBuilderTest.groovy
index 10afbbf..19f4477 100644
--- a/subprojects/groovy-json/src/test/groovy/groovy/json/StreamingJsonBuilderTest.groovy
+++ b/subprojects/groovy-json/src/test/groovy/groovy/json/StreamingJsonBuilderTest.groovy
@@ -72,6 +72,16 @@ class StreamingJsonBuilderTest extends GroovyTestCase {
         }
     }
 
+    void testUnescapedJson() {
+        new StringWriter().with { w ->
+            new StreamingJsonBuilder(w).call {
+                a 1
+                b JsonOutput.unescaped('{"name":"Fred"}')
+            }
+            assert w.toString() == '{"a":1,"b":{"name":"Fred"}}'
+        }
+    }
+
     void testEmptyArray() {
         new StringWriter().with { w ->
             def json = new StreamingJsonBuilder(w)