[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