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)