Fix String with special char in Json

This commit is contained in:
jeffcheasey88 2023-09-16 12:16:52 +02:00
parent c8796e320f
commit 06ac691747
4 changed files with 64 additions and 16 deletions

View file

@ -1,3 +1,50 @@
package dev.peerat.framework.utils.json; package dev.peerat.framework.utils.json;
public interface Json{} public class Json{
public void buildValue(StringBuilder builder, Object value){
if(value == null) builder.append("null");
else if(value instanceof String){
builder.append('"');
for(char c : ((String)value).toCharArray()){
if(c == '"'){
builder.append("\\\"");
continue;
}
if(c == '\\'){
builder.append("\\\\");
continue;
}
if(c == '\n'){
builder.append("\\n");
continue;
}
if(c == '\b'){
builder.append("\\b");
continue;
}
if(c == '\f'){
builder.append("\\f");
continue;
}
if(c == '\r'){
builder.append("\\r");
continue;
}
if(c == '\t'){
builder.append("\\t");
continue;
}
builder.append(c);
}
builder.append('"');
}else if(value instanceof Character){
builder.append('\'');
builder.append(value);
builder.append('\'');
}else{
builder.append(value);
}
}
}

View file

@ -1,9 +1,10 @@
package dev.peerat.framework.utils.json; package dev.peerat.framework.utils.json;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
public class JsonArray implements Json{ public class JsonArray extends Json{
private List<Object> list; private List<Object> list;
@ -17,7 +18,16 @@ public class JsonArray implements Json{
@Override @Override
public String toString(){ public String toString(){
return list.toString(); Iterator<Object> iterator = list.iterator();
if(!iterator.hasNext()) return "[]";
StringBuilder builder= new StringBuilder();
builder.append('[');
while(iterator.hasNext()){
buildValue(builder, iterator.next());
if(iterator.hasNext()) builder.append(',');
}
builder.append(']');
return builder.toString();
} }

View file

@ -5,7 +5,7 @@ import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
public class JsonMap implements Json{ public class JsonMap extends Json{
private Map<String, Object> map; private Map<String, Object> map;
@ -38,17 +38,8 @@ public class JsonMap implements Json{
builder.append("\":"); builder.append("\":");
Object value = entry.getValue(); Object value = entry.getValue();
if(value instanceof String){ buildValue(builder, value);
builder.append('"');
builder.append(value);
builder.append('"');
}else if(value instanceof Character){
builder.append('\'');
builder.append(value);
builder.append('\'');
}else{
builder.append(value);
}
if(iterator.hasNext()) builder.append(','); if(iterator.hasNext()) builder.append(',');
} }
builder.append('}'); builder.append('}');

View file

@ -133,7 +133,7 @@ public class JsonParser extends Parser<Json>{
return container.getValue(); return container.getValue();
} }
private static class JsonContainer implements Json{ private static class JsonContainer extends Json{
private Json value; private Json value;