From ddaac6163a509e6adc7d759a9a2e0bf5537633a0 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Fri, 17 Apr 2015 21:01:41 +0000 Subject: [PATCH] Added basic support for backslash escaping for json writer, parser implementation is incomplete --- src/zutil/parser/json/JSONParser.java | 11 +++++++++-- src/zutil/parser/json/JSONWriter.java | 9 +++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/zutil/parser/json/JSONParser.java b/src/zutil/parser/json/JSONParser.java index e232cf2..1a14616 100644 --- a/src/zutil/parser/json/JSONParser.java +++ b/src/zutil/parser/json/JSONParser.java @@ -108,6 +108,7 @@ public class JSONParser{ end.i = 0; break; // Parse String + // TODO: Support double backslash escaping case '\"': root = new DataNode(DataType.String); StringBuilder str = new StringBuilder(); @@ -131,8 +132,10 @@ public class JSONParser{ root = new DataNode(DataType.Boolean); else if( NUMBER_PATTERN.matcher(data).matches() ) root = new DataNode(DataType.Number); - else - root = new DataNode(DataType.String); + else { + root = new DataNode(DataType.String); + data = unEscapeString(data); + } root.set(data); break; } @@ -140,5 +143,9 @@ public class JSONParser{ return root; } + private static String unEscapeString(String str){ + // Replace two backslash with one + return str.replaceAll("\\\\\\\\", "\\\\"); + } } diff --git a/src/zutil/parser/json/JSONWriter.java b/src/zutil/parser/json/JSONWriter.java index 3b38433..8d133ef 100644 --- a/src/zutil/parser/json/JSONWriter.java +++ b/src/zutil/parser/json/JSONWriter.java @@ -83,7 +83,7 @@ public class JSONWriter{ out.append(", "); String key = it.next(); out.append('\"'); - out.append(key); + out.append(escapeString(key)); out.append("\": "); write(root.get(key)); first = false; @@ -104,7 +104,7 @@ public class JSONWriter{ default: if(root.getString() != null && root.getType() == DataType.String){ out.append('\"'); - out.append(root.toString()); + out.append(escapeString(root.toString())); out.append('\"'); } else out.append(root.toString()); @@ -112,6 +112,11 @@ public class JSONWriter{ } } + private static String escapeString(String str){ + // Replace one backslash with two + return str.replaceAll("\\\\", "\\\\\\\\"); + } + /** * Closes the internal stream */