Added basic support for backslash escaping for json writer, parser implementation is incomplete

This commit is contained in:
Ziver Koc 2015-04-17 21:01:41 +00:00
parent 0bd94eeebf
commit ddaac6163a
2 changed files with 16 additions and 4 deletions

View file

@ -108,6 +108,7 @@ public class JSONParser{
end.i = 0; end.i = 0;
break; break;
// Parse String // Parse String
// TODO: Support double backslash escaping
case '\"': case '\"':
root = new DataNode(DataType.String); root = new DataNode(DataType.String);
StringBuilder str = new StringBuilder(); StringBuilder str = new StringBuilder();
@ -131,8 +132,10 @@ public class JSONParser{
root = new DataNode(DataType.Boolean); root = new DataNode(DataType.Boolean);
else if( NUMBER_PATTERN.matcher(data).matches() ) else if( NUMBER_PATTERN.matcher(data).matches() )
root = new DataNode(DataType.Number); root = new DataNode(DataType.Number);
else else {
root = new DataNode(DataType.String); root = new DataNode(DataType.String);
data = unEscapeString(data);
}
root.set(data); root.set(data);
break; break;
} }
@ -140,5 +143,9 @@ public class JSONParser{
return root; return root;
} }
private static String unEscapeString(String str){
// Replace two backslash with one
return str.replaceAll("\\\\\\\\", "\\\\");
}
} }

View file

@ -83,7 +83,7 @@ public class JSONWriter{
out.append(", "); out.append(", ");
String key = it.next(); String key = it.next();
out.append('\"'); out.append('\"');
out.append(key); out.append(escapeString(key));
out.append("\": "); out.append("\": ");
write(root.get(key)); write(root.get(key));
first = false; first = false;
@ -104,7 +104,7 @@ public class JSONWriter{
default: default:
if(root.getString() != null && root.getType() == DataType.String){ if(root.getString() != null && root.getType() == DataType.String){
out.append('\"'); out.append('\"');
out.append(root.toString()); out.append(escapeString(root.toString()));
out.append('\"'); out.append('\"');
} else } else
out.append(root.toString()); 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 * Closes the internal stream
*/ */