package foundation.json;
|
|
import java.util.List;
|
import java.util.Set;
|
|
import org.json.JSONArray;
|
import org.json.JSONObject;
|
|
import foundation.util.Util;
|
|
public abstract class JSONReader implements Iterable<JSONReader>, IJSONProvider{
|
|
protected String name;
|
protected JType type;
|
|
public abstract boolean isEmpty();
|
|
public abstract boolean hasChildren();
|
|
public abstract boolean has(String name);
|
|
public abstract JType getType(String name);
|
|
public abstract Object getValue();
|
|
public abstract Object getValue(String name);
|
|
public abstract Object getValue(String name, Object defaultValue);
|
|
public abstract String getRawString(String name);
|
|
public abstract String getString(String name);
|
|
public abstract String getString(String name, String defaultValue);
|
|
public abstract String getDecodeString(String name);
|
|
public abstract String getDecodeString(String name, String defaultValue);
|
|
public abstract Set<String> getStringSet();
|
|
public abstract List<String> getStringList();
|
|
public abstract Set<String> getStringSet(String name);
|
|
public abstract List<String> getStringList(String name);
|
|
public abstract Integer getInteger(Integer defaultValue);
|
|
public abstract Integer getInteger(String name, Integer defaultValue);
|
|
public abstract boolean getBoolean(boolean defaultValue);
|
|
public abstract boolean getBoolean(String name, boolean defaultValue);
|
|
public abstract <T extends JSONReader> T getReader(String name, JType type);
|
|
public void put(String name, Object value) {
|
if (value instanceof JSONReader) {
|
putReader(name, (JSONReader)value);
|
return;
|
}
|
|
JType type = JType.getInstance(value);
|
|
if (JType.Array == type) {
|
JArrayReader reader = new JArrayReader(name, (JSONArray)value);
|
putReader(name, reader);
|
}
|
else if (JType.Object == type) {
|
JObjectReader reader = new JObjectReader(name, (JSONObject)value);
|
putReader(name, reader);
|
}
|
else {
|
putValue(name, value);
|
}
|
}
|
|
protected abstract void putReader(String name, JSONReader reader);
|
|
protected abstract void putValue(String name, Object value);
|
|
protected abstract void putValue(Object value);
|
|
public String getName() {
|
return name;
|
}
|
|
public JType getType() {
|
return type;
|
}
|
|
public static JType readType(String content) {
|
if (Util.isEmpty(content)) {
|
return JType.Empty;
|
}
|
|
int max = content.length();
|
|
for (int i = 0; i < max; i++) {
|
char c = content.charAt(i);
|
|
if (' ' == c) {
|
continue;
|
}
|
else if ('{' == c) {
|
return JType.Object;
|
}
|
else if ('[' == c) {
|
return JType.Array;
|
}
|
else {
|
return JType.Unknown;
|
}
|
}
|
|
return JType.Unknown;
|
}
|
|
public void writeJSON(IJSONWriter writer) {
|
if (JType.Array == type) {
|
JSONArray jsonArray = (JSONArray)getValue(name);
|
writer.beginArray(name);
|
for(Object json: jsonArray) {
|
JSONReader jsonReader = (JSONReader)json;
|
jsonReader.writeJSON(writer);
|
}
|
writer.endArray();
|
}
|
else if (JType.Object == type) {
|
writer.beginObject(name);
|
JSONReader jsonReader = (JSONReader)getValue(name);
|
jsonReader.writeJSON(writer);
|
writer.endObject();
|
}
|
else {
|
writer.write(name, getString(name));
|
}
|
}
|
|
}
|