[Mulgara-svn] r1753 - trunk/src/jar/querylang/java/org/mulgara/protocol
pag at mulgara.org
pag at mulgara.org
Mon Jul 6 22:40:36 UTC 2009
Author: pag
Date: 2009-07-06 15:40:35 -0700 (Mon, 06 Jul 2009)
New Revision: 1753
Modified:
trunk/src/jar/querylang/java/org/mulgara/protocol/StreamedSparqlJSONAnswer.java
Log:
Added in JSON escapes for literal strings. Not having them was a bug
Modified: trunk/src/jar/querylang/java/org/mulgara/protocol/StreamedSparqlJSONAnswer.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/protocol/StreamedSparqlJSONAnswer.java 2009-07-03 17:35:47 UTC (rev 1752)
+++ trunk/src/jar/querylang/java/org/mulgara/protocol/StreamedSparqlJSONAnswer.java 2009-07-06 22:40:35 UTC (rev 1753)
@@ -177,10 +177,38 @@
s.append("\"type\": \"literal\", ");
if (literal.getLanguage() != null) s.append("\"xml:lang\": \"").append(literal.getLanguage()).append("\", ");
}
- s.append("\"value\": \"").append(literal.getLexicalForm()).append("\"");
+ s.append("\"value\": \"").append(jsonEscape(literal.getLexicalForm())).append("\"");
}
+
/**
+ * Escapes strings to be JSON compatible. JSON only expects 16 bit characters.
+ * @param in The string to be escaped.
+ * @return The escaped string.
+ */
+ protected String jsonEscape(String in) {
+ StringBuffer out = new StringBuffer();
+ for (int i = 0; i < in.length(); i++) {
+ char c = in.charAt(i);
+ if (c == '/') out.append("\\/");
+ else if (c == '\\') out.append("\\\\");
+ else if (c == '"') out.append("\\\"");
+ else if (Character.isISOControl(c)) {
+ if (c == '\b') out.append("\\b");
+ else if (c == '\t') out.append("\\t");
+ else if (c == '\n') out.append("\\n");
+ else if (c == '\f') out.append("\\f");
+ else if (c == '\r') out.append("\\r");
+ else out.append("\\u").append(String.format("%04x", (int)c));
+ } else {
+ out.append(c);
+ }
+ }
+ return out.toString();
+ }
+
+
+ /**
* Adds a comma if needed at this point. Commas are usually needed.
* @throws IOException An error writing to the stream.
*/
More information about the Mulgara-svn
mailing list