From dd556ad5cbbec28666b35fe9017abbe348b95688 Mon Sep 17 00:00:00 2001 From: Kasper Jeppe Jeppesen Date: Thu, 20 Apr 2017 16:30:56 -0700 Subject: [PATCH] bugfix string quoting --- .../me/doubledutch/lazyjson/LazyArray.java | 14 ++- .../me/doubledutch/lazyjson/LazyElement.java | 59 +++++++++++++ .../me/doubledutch/lazyjson/LazyNode.java | 87 +++++++++++++------ .../me/doubledutch/lazyjson/LazyObject.java | 10 ++- .../resources/lazyjson_version.properties | 6 +- .../me/doubledutch/lazyjson/ModifyTest.java | 10 +++ 6 files changed, 153 insertions(+), 33 deletions(-) diff --git a/src/main/java/me/doubledutch/lazyjson/LazyArray.java b/src/main/java/me/doubledutch/lazyjson/LazyArray.java index 9f64214..8277520 100644 --- a/src/main/java/me/doubledutch/lazyjson/LazyArray.java +++ b/src/main/java/me/doubledutch/lazyjson/LazyArray.java @@ -207,7 +207,12 @@ private void insertChild(int index,LazyNode token) throws LazyException{ } public LazyArray put(String value) throws LazyException{ - LazyNode child=appendAndSetDirtyString(LazyNode.VALUE_STRING,value); + LazyNode child=null; + if(shouldQuoteString(value)){ + child=appendAndSetDirtyString(LazyNode.VALUE_ESTRING,quoteString(value)); + }else{ + child=appendAndSetDirtyString(LazyNode.VALUE_STRING,value); + } appendChild(child); return this; } @@ -279,7 +284,12 @@ public LazyArray put(LazyObject value) throws LazyException{ } public LazyArray put(int index,String value) throws LazyException{ - LazyNode child=appendAndSetDirtyString(LazyNode.VALUE_STRING,value); + LazyNode child=null; + if(shouldQuoteString(value)){ + child=appendAndSetDirtyString(LazyNode.VALUE_ESTRING,quoteString(value)); + }else{ + child=appendAndSetDirtyString(LazyNode.VALUE_STRING,value); + } insertChild(index,child); return this; } diff --git a/src/main/java/me/doubledutch/lazyjson/LazyElement.java b/src/main/java/me/doubledutch/lazyjson/LazyElement.java index 39ea5f7..7a48ffc 100644 --- a/src/main/java/me/doubledutch/lazyjson/LazyElement.java +++ b/src/main/java/me/doubledutch/lazyjson/LazyElement.java @@ -83,6 +83,65 @@ public static LazyElement parse(String str) throws LazyException{ throw new LazyException("The given string is not a JSON object or array"); } + protected static boolean shouldQuoteString(String str){ + boolean found=false; + int length=str.length(); + char[] cbuf=new char[length]; + str.getChars(0,length,cbuf,0); + for(int i=0;i= '\u0080' && c<'\u00a0') || (c>='\u2000' && c<'\u2100')){ + found=true; + } + } + return found; + } + + protected static String quoteString(String str){ + StringBuffer buf=new StringBuffer(); + int length=str.length(); + char[] cbuf=new char[length]; + str.getChars(0,length,cbuf,0); + + for(int i=0; i= '\u0080' && c<'\u00a0') || (c>='\u2000' && c<'\u2100')){ + String tmp="000"+Integer.toHexString(c); + buf.append("\\u"+tmp.substring(tmp.length()-4)); + }else{*/ + buf.append(c); + //} + } + } + return buf.toString(); + } + public static LazyElement readFromTemplate(Template t,ByteBuffer buf,DictionaryCache dict) throws LazyException{ String str=t.read(buf,dict); // System.out.println(str); diff --git a/src/main/java/me/doubledutch/lazyjson/LazyNode.java b/src/main/java/me/doubledutch/lazyjson/LazyNode.java index 2f01e03..a7e8499 100644 --- a/src/main/java/me/doubledutch/lazyjson/LazyNode.java +++ b/src/main/java/me/doubledutch/lazyjson/LazyNode.java @@ -346,38 +346,71 @@ protected String getStringValue(char[] source,StringBuilder dirtyBuf){ return new String(source,startIndex,endIndex-startIndex); }else{ StringBuilder buf=new StringBuilder(endIndex-startIndex); - for(int i=startIndex;i