package foundation.json;
|
|
import java.util.Collection;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
import org.json.JSONArray;
|
import org.json.JSONObject;
|
|
import foundation.util.MapList;
|
import foundation.util.Util;
|
|
public class JObjectReader extends JSONReader implements IJSONProvider {
|
|
protected MapList<String, JSONReader> items;
|
|
public JObjectReader() {
|
items = new MapList<String, JSONReader>();
|
type = JType.Object;
|
}
|
|
public JObjectReader(String content) {
|
this();
|
parse(content);
|
}
|
|
public JObjectReader(String name, JSONObject content) {
|
this();
|
|
this.name = name;
|
parse(content);
|
}
|
|
@Override
|
public boolean isEmpty() {
|
return items.isEmpty();
|
}
|
|
@Override
|
public boolean hasChildren() {
|
return !items.isEmpty();
|
}
|
|
@Override
|
public boolean has(String name) {
|
return items.contains(name);
|
}
|
|
@Override
|
public JType getType(String name) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return JType.Empty;
|
}
|
|
return item.getType();
|
}
|
|
@Override
|
public Object getValue() {
|
return null;
|
}
|
|
@Override
|
public Object getValue(String name) {
|
return getValue(name, null);
|
}
|
|
@Override
|
public Object getValue(String name, Object defaultValue) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return null;
|
}
|
|
return item.getValue(name, defaultValue);
|
}
|
|
public String getRawString(String name) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return null;
|
}
|
|
return item.getRawString(name);
|
}
|
|
@Override
|
public String getString(String name) {
|
return getDecodeString(name, null);
|
}
|
|
@Override
|
public String getString(String name, String defaultValue) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return defaultValue;
|
}
|
|
return item.getDecodeString(name, defaultValue);
|
}
|
|
@Override
|
public String getDecodeString(String name) {
|
return getDecodeString(name, null);
|
}
|
|
@Override
|
public String getDecodeString(String name, String defaultValue) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return defaultValue;
|
}
|
|
return item.getDecodeString(name, defaultValue);
|
}
|
|
@Override
|
public Set<String> getStringSet() {
|
return null;
|
}
|
|
@Override
|
public List<String> getStringList() {
|
return null;
|
}
|
|
@Override
|
public Set<String> getStringSet(String name) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return null;
|
}
|
|
return item.getStringSet();
|
}
|
|
@Override
|
public List<String> getStringList(String name) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return null;
|
}
|
|
return item.getStringList();
|
}
|
|
@Override
|
public Integer getInteger(Integer defaultValue) {
|
return defaultValue;
|
}
|
|
@Override
|
public Integer getInteger(String name, Integer defaultValue) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return defaultValue;
|
}
|
|
return item.getInteger(defaultValue);
|
}
|
|
@Override
|
public boolean getBoolean(boolean defaultValue) {
|
return false;
|
}
|
|
@Override
|
public boolean getBoolean(String name, boolean defaultValue) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return defaultValue;
|
}
|
|
return item.getBoolean(defaultValue);
|
}
|
|
@Override @SuppressWarnings("unchecked")
|
public <T extends JSONReader> T getReader(String name, JType type) {
|
JSONReader item = items.get(name);
|
|
if (item == null) {
|
return null;
|
}
|
|
if (type != item.getType()) {
|
return null;
|
}
|
|
return (T)item;
|
}
|
|
protected void putReader(String name, JSONReader reader) {
|
items.add(name, reader);
|
}
|
|
@Override
|
protected void putValue(String name, Object value) {
|
JSONReader reader = items.get(name);
|
|
if (reader == null) {
|
reader = new JValueReader(name);
|
items.add(name, reader);
|
}
|
|
reader.putValue(value);
|
}
|
|
@Override
|
protected void putValue(Object value) {
|
return;
|
}
|
|
@Override
|
public Iterator<JSONReader> iterator() {
|
return items.iterator();
|
}
|
|
private void parse(String content) {
|
if (Util.isEmpty(content)) {
|
return;
|
}
|
|
JSONObject jsonObject = new JSONObject(content);
|
parse(jsonObject);
|
}
|
|
private void parse(JSONObject content) {
|
items.clear();
|
|
if (content == null) {
|
return;
|
}
|
|
Iterator<String> keys = content.keys();
|
|
while (keys.hasNext()) {
|
String key = keys.next();
|
Object value = content.get(key);
|
|
if (value instanceof JSONObject) {
|
JObjectReader item = new JObjectReader(key, (JSONObject)value);
|
items.add(key, item);
|
}
|
else if (value instanceof JSONArray) {
|
JArrayReader item = new JArrayReader(key, (JSONArray)value);
|
items.add(key, item);
|
}
|
else {
|
JValueReader item = new JValueReader(key, value);
|
items.add(key, item);
|
}
|
}
|
}
|
|
public MapList<String, JSONReader> getItems() {
|
return items;
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
Map<String, JSONReader> map = items.getItemMap();
|
if(map == null) {
|
return ;
|
}
|
|
Collection<JSONReader> values = map.values();
|
for (JSONReader value: values) {
|
value.writeJSON(writer);
|
}
|
|
writer.endObject();
|
}
|
}
|