/**
* Copyright 2008 - 2015 The Loon Game Engine Authors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* @project loon
* @author cping
* @email:javachenpeng@yahoo.com
* @version 0.5
*/
package loon.utils.json;
import loon.Json;
import loon.Json.TypedArray;
import loon.utils.ObjectMap.Entry;
import loon.utils.OrderedMap;
class JsonObject implements Json.Object {
private final OrderedMap<String, Object> map;
public JsonObject() {
map = new OrderedMap<String, Object>();
}
public static JsonBuilder<JsonObject> builder() {
return new JsonBuilder<JsonObject>(new JsonObject());
}
public Json.Array getArray(String key) {
return getArray(key, (Json.Array) null);
}
public Json.Array getArray(String key, Json.Array def) {
Object o = get(key);
return (o instanceof Json.Array) ? (Json.Array) o : def;
}
public boolean getBoolean(String key) {
return getBoolean(key, false);
}
public boolean getBoolean(String key, boolean def) {
Object o = get(key);
return o instanceof Boolean ? (Boolean) o : def;
}
public double getDouble(String key) {
return getDouble(key, 0);
}
public double getDouble(String key, double def) {
Object o = get(key);
return o instanceof Number ? ((Number) o).doubleValue() : def;
}
public float getNumber(String key) {
return getNumber(key, 0);
}
public float getNumber(String key, float def) {
Object o = get(key);
return o instanceof Number ? ((Number) o).floatValue() : def;
}
public int getInt(String key) {
return getInt(key, 0);
}
public int getInt(String key, int def) {
Object o = get(key);
return o instanceof Number ? ((Number) o).intValue() : def;
}
public long getLong(String key) {
return getLong(key, 0L);
}
public long getLong(String key, long def) {
Object o = get(key);
return o instanceof Number ? ((Number) o).longValue() : def;
}
public Json.Object getObject(String key) {
return getObject(key, null);
}
public Json.Object getObject(String key, Json.Object def) {
Object o = get(key);
return (o instanceof JsonObject) ? (JsonObject) o : def;
}
public String getString(String key) {
return getString(key, null);
}
public String getString(String key, String def) {
Object o = get(key);
return (o instanceof String) ? (String) o : def;
}
public boolean containsKey(String key) {
return map.containsKey(key);
}
public boolean isArray(String key) {
return get(key) instanceof Json.Array;
}
public boolean isBoolean(String key) {
return get(key) instanceof Boolean;
}
public boolean isNull(String key) {
return get(key) == null;
}
public boolean isNumber(String key) {
return get(key) instanceof Number;
}
public boolean isString(String key) {
return get(key) instanceof String;
}
public boolean isObject(String key) {
return get(key) instanceof Json.Object;
}
@Override
public TypedArray<String> keys() {
return new JsonStringTypedArray(map.keys());
}
@Override
public JsonObject put(String key, Object value) {
JsonImpl.checkJsonType(value);
map.put(key, value);
return this;
}
@Override
public JsonObject remove(String key) {
map.remove(key);
return this;
}
@Override
public String toString() {
return map.toString();
}
@Override
public <T extends JsonSink<T>> JsonSink<T> write(JsonSink<T> sink) {
for (Entry<String, Object> entry: map.entries()){
sink.value(entry.key, entry.value);
}
return sink;
}
Object get(String key) {
return map.get(key);
}
}