本文主要是介绍throw new JSONException(JSONObject[ + JSONUtils.quote(key) + ] is not a number.);,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
JSONObject.get*** null的话回报JSONException,大家注意下,附以下源码,正常try catch处理即可!!
package net.sf.json;import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.Writer;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import net.sf.ezmorph.Morpher;
import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.array.ObjectArrayMorpher;
import net.sf.ezmorph.bean.BeanMorpher;
import net.sf.ezmorph.object.IdentityObjectMorpher;
import net.sf.json.processors.DefaultValueProcessor;
import net.sf.json.processors.JsonBeanProcessor;
import net.sf.json.processors.JsonValueProcessor;
import net.sf.json.processors.JsonVerifier;
import net.sf.json.processors.PropertyNameProcessor;
import net.sf.json.regexp.RegexpMatcher;
import net.sf.json.regexp.RegexpUtils;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.util.EnumMorpher;
import net.sf.json.util.JSONTokener;
import net.sf.json.util.JSONUtils;
import net.sf.json.util.NewBeanInstanceStrategy;
import net.sf.json.util.PropertyFilter;
import net.sf.json.util.PropertySetStrategy;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.map.ListOrderedMap;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public final class JSONObject extends AbstractJSONimplements JSON, Map, Comparable
{private static final Log log = LogFactory.getLog(JSONObject.class);private boolean nullObject;private Map properties;public static JSONObject fromObject(Object object){return fromObject(object, new JsonConfig());}public static JSONObject fromObject(Object object, JsonConfig jsonConfig){if ((object == null) || (JSONUtils.isNull(object)))return new JSONObject(true);if ((object instanceof Enum))throw new JSONException("'object' is an Enum. Use JSONArray instead");if (((object instanceof Annotation)) || ((object != null) && (object.getClass().isAnnotation()))){throw new JSONException("'object' is an Annotation.");}if ((object instanceof JSONObject))return _fromJSONObject((JSONObject)object, jsonConfig);if ((object instanceof DynaBean))return _fromDynaBean((DynaBean)object, jsonConfig);if ((object instanceof JSONTokener))return _fromJSONTokener((JSONTokener)object, jsonConfig);if ((object instanceof JSONString))return _fromJSONString((JSONString)object, jsonConfig);if ((object instanceof Map))return _fromMap((Map)object, jsonConfig);if ((object instanceof String))return _fromString((String)object, jsonConfig);if ((JSONUtils.isNumber(object)) || (JSONUtils.isBoolean(object)) || (JSONUtils.isString(object))){return new JSONObject();}if (JSONUtils.isArray(object)) {throw new JSONException("'object' is an array. Use JSONArray instead");}return _fromBean(object, jsonConfig);}public static Object toBean(JSONObject jsonObject){if ((jsonObject == null) || (jsonObject.isNullObject())) {return null;}DynaBean dynaBean = null;JsonConfig jsonConfig = new JsonConfig();Map props = JSONUtils.getProperties(jsonObject);dynaBean = JSONUtils.newDynaBean(jsonObject, jsonConfig);Iterator entries = jsonObject.names(jsonConfig).iterator();while (entries.hasNext()) {String name = (String)entries.next();String key = JSONUtils.convertToJavaIdentifier(name, jsonConfig);Class type = (Class)props.get(name);Object value = jsonObject.get(name);try {if (!JSONUtils.isNull(value)) {if ((value instanceof JSONArray))dynaBean.set(key, JSONArray.toCollection((JSONArray)value));else if ((String.class.isAssignableFrom(type)) || (Boolean.class.isAssignableFrom(type)) || (JSONUtils.isNumber(type)) || (Character.class.isAssignableFrom(type)) || (JSONFunction.class.isAssignableFrom(type))){dynaBean.set(key, value);}else dynaBean.set(key, toBean((JSONObject)value));}else if (type.isPrimitive()){log.warn("Tried to assign null value to " + key + ":" + type.getName());dynaBean.set(key, JSONUtils.getMorpherRegistry().morph(type, null));}else {dynaBean.set(key, null);}}catch (JSONException jsone) {throw jsone;} catch (Exception e) {throw new JSONException("Error while setting property=" + name + " type" + type, e);}}return dynaBean;}public static Object toBean(JSONObject jsonObject, Class beanClass){JsonConfig jsonConfig = new JsonConfig();jsonConfig.setRootClass(beanClass);return toBean(jsonObject, jsonConfig);}public static Object toBean(JSONObject jsonObject, Class beanClass, Map classMap){JsonConfig jsonConfig = new JsonConfig();jsonConfig.setRootClass(beanClass);jsonConfig.setClassMap(classMap);return toBean(jsonObject, jsonConfig);}public static Object toBean(JSONObject jsonObject, JsonConfig jsonConfig){if ((jsonObject == null) || (jsonObject.isNullObject())) {return null;}Class beanClass = jsonConfig.getRootClass();Map classMap = jsonConfig.getClassMap();if (beanClass == null) {return toBean(jsonObject);}if (classMap == null) {classMap = Collections.EMPTY_MAP;}Object bean = null;try {if (beanClass.isInterface()) {if (!Map.class.isAssignableFrom(beanClass)) {throw new JSONException("beanClass is an interface. " + beanClass);}bean = new HashMap();}else {bean = jsonConfig.getNewBeanInstanceStrategy().newInstance(beanClass, jsonObject);}}catch (JSONException jsone) {throw jsone;} catch (Exception e) {throw new JSONException(e);}Map props = JSONUtils.getProperties(jsonObject);PropertyFilter javaPropertyFilter = jsonConfig.getJavaPropertyFilter();Iterator entries = jsonObject.names(jsonConfig).iterator();while (entries.hasNext()) {String name = (String)entries.next();Class type = (Class)props.get(name);Object value = jsonObject.get(name);if ((javaPropertyFilter != null) && (javaPropertyFilter.apply(bean, name, value))) {continue;}String key = (Map.class.isAssignableFrom(beanClass)) && (jsonConfig.isSkipJavaIdentifierTransformationInMapKeys()) ? name : JSONUtils.convertToJavaIdentifier(name, jsonConfig);PropertyNameProcessor propertyNameProcessor = jsonConfig.findJavaPropertyNameProcessor(beanClass);if (propertyNameProcessor != null)key = propertyNameProcessor.processPropertyName(beanClass, key);try{if (Map.class.isAssignableFrom(beanClass)){if (JSONUtils.isNull(value)) {setProperty(bean, key, value, jsonConfig);} else if ((value instanceof JSONArray)) {setProperty(bean, key, convertPropertyValueToCollection(key, value, jsonConfig, name, classMap, List.class), jsonConfig);}else if ((String.class.isAssignableFrom(type)) || (JSONUtils.isBoolean(type)) || (JSONUtils.isNumber(type)) || (JSONUtils.isString(type)) || (JSONFunction.class.isAssignableFrom(type))){if ((jsonConfig.isHandleJettisonEmptyElement()) && ("".equals(value)))setProperty(bean, key, null, jsonConfig);elsesetProperty(bean, key, value, jsonConfig);}else {Class targetClass = findTargetClass(key, classMap);targetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(targetClass);jsc.setClassMap(classMap);if (targetClass != null)setProperty(bean, key, toBean((JSONObject)value, jsc), jsonConfig);elsesetProperty(bean, key, toBean((JSONObject)value), jsonConfig);}}else {PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor(bean, key);if ((pd != null) && (pd.getWriteMethod() == null)) {log.info("Property '" + key + "' of " + bean.getClass() + " has no write method. SKIPPED.");continue;}if (pd != null) {Class targetType = pd.getPropertyType();if (!JSONUtils.isNull(value)) {if ((value instanceof JSONArray)) {if (List.class.isAssignableFrom(pd.getPropertyType())) {setProperty(bean, key, convertPropertyValueToCollection(key, value, jsonConfig, name, classMap, pd.getPropertyType()), jsonConfig);}else if (Set.class.isAssignableFrom(pd.getPropertyType())) {setProperty(bean, key, convertPropertyValueToCollection(key, value, jsonConfig, name, classMap, pd.getPropertyType()), jsonConfig);}else {setProperty(bean, key, convertPropertyValueToArray(key, value, targetType, jsonConfig, classMap), jsonConfig);}}else if ((String.class.isAssignableFrom(type)) || (JSONUtils.isBoolean(type)) || (JSONUtils.isNumber(type)) || (JSONUtils.isString(type)) || (JSONFunction.class.isAssignableFrom(type))){if (pd != null) {if ((jsonConfig.isHandleJettisonEmptyElement()) && ("".equals(value)))setProperty(bean, key, null, jsonConfig);else if (!targetType.isInstance(value)) {setProperty(bean, key, morphPropertyValue(key, value, type, targetType), jsonConfig);}elsesetProperty(bean, key, value, jsonConfig);}else if ((beanClass == null) || ((bean instanceof Map)))setProperty(bean, key, value, jsonConfig);else {log.warn("Tried to assign property " + key + ":" + type.getName() + " to bean of class " + bean.getClass().getName());}}else if (jsonConfig.isHandleJettisonSingleElementArray()) {JSONArray array = new JSONArray().element(value, jsonConfig);Class newTargetClass = findTargetClass(key, classMap);newTargetClass = newTargetClass == null ? findTargetClass(name, classMap) : newTargetClass;JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(newTargetClass);jsc.setClassMap(classMap);if (targetType.isArray()) {setProperty(bean, key, JSONArray.toArray(array, jsc), jsonConfig);} else if (JSONArray.class.isAssignableFrom(targetType)) {setProperty(bean, key, array, jsonConfig);} else if ((List.class.isAssignableFrom(targetType)) || (Set.class.isAssignableFrom(targetType))){jsc.setCollectionType(targetType);setProperty(bean, key, JSONArray.toCollection(array, jsc), jsonConfig);}else {setProperty(bean, key, toBean((JSONObject)value, jsc), jsonConfig);}} else {if ((targetType == Object.class) || (targetType.isInterface())) {Class targetTypeCopy = targetType;targetType = findTargetClass(key, classMap);targetType = targetType == null ? findTargetClass(name, classMap) : targetType;targetType = (targetType == null) && (targetTypeCopy.isInterface()) ? targetTypeCopy : targetType;}JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(targetType);jsc.setClassMap(classMap);setProperty(bean, key, toBean((JSONObject)value, jsc), jsonConfig);}}else if (type.isPrimitive()){log.warn("Tried to assign null value to " + key + ":" + type.getName());setProperty(bean, key, JSONUtils.getMorpherRegistry().morph(type, null), jsonConfig);}else {setProperty(bean, key, null, jsonConfig);}}else if (!JSONUtils.isNull(value)) {if ((value instanceof JSONArray)) {setProperty(bean, key, convertPropertyValueToCollection(key, value, jsonConfig, name, classMap, List.class), jsonConfig);}else if ((String.class.isAssignableFrom(type)) || (JSONUtils.isBoolean(type)) || (JSONUtils.isNumber(type)) || (JSONUtils.isString(type)) || (JSONFunction.class.isAssignableFrom(type))){if ((beanClass == null) || ((bean instanceof Map)) || (jsonConfig.getPropertySetStrategy() != null) || (!jsonConfig.isIgnorePublicFields())){setProperty(bean, key, value, jsonConfig);}else log.warn("Tried to assign property " + key + ":" + type.getName() + " to bean of class " + bean.getClass().getName());}else if (jsonConfig.isHandleJettisonSingleElementArray()) {Class newTargetClass = findTargetClass(key, classMap);newTargetClass = newTargetClass == null ? findTargetClass(name, classMap) : newTargetClass;JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(newTargetClass);jsc.setClassMap(classMap);setProperty(bean, key, toBean((JSONObject)value, jsc), jsonConfig);} else {setProperty(bean, key, value, jsonConfig);}}else if (type.isPrimitive()){log.warn("Tried to assign null value to " + key + ":" + type.getName());setProperty(bean, key, JSONUtils.getMorpherRegistry().morph(type, null), jsonConfig);}else {setProperty(bean, key, null, jsonConfig);}}}catch (JSONException jsone){throw jsone;} catch (Exception e) {throw new JSONException("Error while setting property=" + name + " type " + type, e);}}return bean;}public static Object toBean(JSONObject jsonObject, Object root, JsonConfig jsonConfig){if ((jsonObject == null) || (jsonObject.isNullObject()) || (root == null)) {return root;}Class rootClass = root.getClass();if (rootClass.isInterface()) {throw new JSONException("Root bean is an interface. " + rootClass);}Map classMap = jsonConfig.getClassMap();if (classMap == null) {classMap = Collections.EMPTY_MAP;}Map props = JSONUtils.getProperties(jsonObject);PropertyFilter javaPropertyFilter = jsonConfig.getJavaPropertyFilter();Iterator entries = jsonObject.names(jsonConfig).iterator();while (entries.hasNext()) {String name = (String)entries.next();Class type = (Class)props.get(name);Object value = jsonObject.get(name);if ((javaPropertyFilter != null) && (javaPropertyFilter.apply(root, name, value))) {continue;}String key = JSONUtils.convertToJavaIdentifier(name, jsonConfig);try {PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor(root, key);if ((pd != null) && (pd.getWriteMethod() == null)) {log.info("Property '" + key + "' of " + root.getClass() + " has no write method. SKIPPED.");continue;}if (!JSONUtils.isNull(value)) {if ((value instanceof JSONArray)) {if ((pd == null) || (List.class.isAssignableFrom(pd.getPropertyType()))) {Class targetClass = findTargetClass(key, classMap);targetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;Object newRoot = jsonConfig.getNewBeanInstanceStrategy().newInstance(targetClass, null);List list = JSONArray.toList((JSONArray)value, newRoot, jsonConfig);setProperty(root, key, list, jsonConfig);} else {Class innerType = JSONUtils.getInnerComponentType(pd.getPropertyType());Class targetInnerType = findTargetClass(key, classMap);if ((innerType.equals(Object.class)) && (targetInnerType != null) && (!targetInnerType.equals(Object.class))){innerType = targetInnerType;}Object newRoot = jsonConfig.getNewBeanInstanceStrategy().newInstance(innerType, null);Object array = JSONArray.toArray((JSONArray)value, newRoot, jsonConfig);if ((innerType.isPrimitive()) || (JSONUtils.isNumber(innerType)) || (Boolean.class.isAssignableFrom(innerType)) || (JSONUtils.isString(innerType))){array = JSONUtils.getMorpherRegistry().morph(Array.newInstance(innerType, 0).getClass(), array);}else if (!array.getClass().equals(pd.getPropertyType())){if (!pd.getPropertyType().equals(Object.class)){Morpher morpher = JSONUtils.getMorpherRegistry().getMorpherFor(Array.newInstance(innerType, 0).getClass());if (IdentityObjectMorpher.getInstance().equals(morpher)){ObjectArrayMorpher beanMorpher = new ObjectArrayMorpher(new BeanMorpher(innerType, JSONUtils.getMorpherRegistry()));JSONUtils.getMorpherRegistry().registerMorpher(beanMorpher);}array = JSONUtils.getMorpherRegistry().morph(Array.newInstance(innerType, 0).getClass(), array);}}setProperty(root, key, array, jsonConfig);}} else if ((String.class.isAssignableFrom(type)) || (JSONUtils.isBoolean(type)) || (JSONUtils.isNumber(type)) || (JSONUtils.isString(type)) || (JSONFunction.class.isAssignableFrom(type))){if (pd != null) {if ((jsonConfig.isHandleJettisonEmptyElement()) && ("".equals(value))) {setProperty(root, key, null, jsonConfig);} else if (!pd.getPropertyType().isInstance(value)){Morpher morpher = JSONUtils.getMorpherRegistry().getMorpherFor(pd.getPropertyType());if (IdentityObjectMorpher.getInstance().equals(morpher)){log.warn("Can't transform property '" + key + "' from " + type.getName() + " into " + pd.getPropertyType().getName() + ". Will register a default BeanMorpher");JSONUtils.getMorpherRegistry().registerMorpher(new BeanMorpher(pd.getPropertyType(), JSONUtils.getMorpherRegistry()));}setProperty(root, key, JSONUtils.getMorpherRegistry().morph(pd.getPropertyType(), value), jsonConfig);}else {setProperty(root, key, value, jsonConfig);}} else if ((root instanceof Map))setProperty(root, key, value, jsonConfig);else {log.warn("Tried to assign property " + key + ":" + type.getName() + " to bean of class " + root.getClass().getName());}}else if (pd != null) {Class targetClass = pd.getPropertyType();if (jsonConfig.isHandleJettisonSingleElementArray()) {JSONArray array = new JSONArray().element(value, jsonConfig);Class newTargetClass = findTargetClass(key, classMap);newTargetClass = newTargetClass == null ? findTargetClass(name, classMap) : newTargetClass;Object newRoot = jsonConfig.getNewBeanInstanceStrategy().newInstance(newTargetClass, null);if (targetClass.isArray()) {setProperty(root, key, JSONArray.toArray(array, newRoot, jsonConfig), jsonConfig);}else if (Collection.class.isAssignableFrom(targetClass)) {setProperty(root, key, JSONArray.toList(array, newRoot, jsonConfig), jsonConfig);}else if (JSONArray.class.isAssignableFrom(targetClass))setProperty(root, key, array, jsonConfig);elsesetProperty(root, key, toBean((JSONObject)value, newRoot, jsonConfig), jsonConfig);}else{if (targetClass == Object.class) {targetClass = findTargetClass(key, classMap);targetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;}Object newRoot = jsonConfig.getNewBeanInstanceStrategy().newInstance(targetClass, null);setProperty(root, key, toBean((JSONObject)value, newRoot, jsonConfig), jsonConfig);}}else if ((root instanceof Map)) {Class targetClass = findTargetClass(key, classMap);targetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;Object newRoot = jsonConfig.getNewBeanInstanceStrategy().newInstance(targetClass, null);setProperty(root, key, toBean((JSONObject)value, newRoot, jsonConfig), jsonConfig);}else {log.warn("Tried to assign property " + key + ":" + type.getName() + " to bean of class " + rootClass.getName());}}else if (type.isPrimitive()){log.warn("Tried to assign null value to " + key + ":" + type.getName());setProperty(root, key, JSONUtils.getMorpherRegistry().morph(type, null), jsonConfig);}else {setProperty(root, key, null, jsonConfig);}}catch (JSONException jsone) {throw jsone;} catch (Exception e) {throw new JSONException("Error while setting property=" + name + " type " + type, e);}}return root;}private static JSONObject _fromBean(Object bean, JsonConfig jsonConfig){if (!addInstance(bean)) {try {return jsonConfig.getCycleDetectionStrategy().handleRepeatedReferenceAsObject(bean);}catch (JSONException jsone) {removeInstance(bean);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(bean);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}}fireObjectStartEvent(jsonConfig);JsonBeanProcessor processor = jsonConfig.findJsonBeanProcessor(bean.getClass());if (processor != null) {JSONObject json = null;try {json = processor.processBean(bean, jsonConfig);if (json == null) {json = (JSONObject)jsonConfig.findDefaultValueProcessor(bean.getClass()).getDefaultValue(bean.getClass());if (json == null) {json = new JSONObject(true);}}removeInstance(bean);fireObjectEndEvent(jsonConfig);} catch (JSONException jsone) {removeInstance(bean);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(bean);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}return json;}Class beanClass = bean.getClass();PropertyNameProcessor propertyNameProcessor = jsonConfig.findJsonPropertyNameProcessor(beanClass);Collection exclusions = jsonConfig.getMergedExcludes(beanClass);JSONObject jsonObject = new JSONObject();try {PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(bean);PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();for (int i = 0; i < pds.length; i++) {boolean bypass = false;String key = pds[i].getName();if (exclusions.contains(key)){continue;}if ((jsonConfig.isIgnoreTransientFields()) && (isTransientField(key, beanClass, jsonConfig))){continue;}Class type = pds[i].getPropertyType();try { pds[i].getReadMethod();} catch (Exception e){String warning = "Property '" + key + "' of " + beanClass + " has no read method. SKIPPED";fireWarnEvent(warning, jsonConfig);log.info(warning);continue;}if (pds[i].getReadMethod() != null){if (isTransient(pds[i].getReadMethod(), jsonConfig))continue;Object value = PropertyUtils.getProperty(bean, key);if ((jsonPropertyFilter != null) && (jsonPropertyFilter.apply(bean, key, value))) {continue;}JsonValueProcessor jsonValueProcessor = jsonConfig.findJsonValueProcessor(beanClass, type, key);if (jsonValueProcessor != null) {value = jsonValueProcessor.processObjectValue(key, value, jsonConfig);bypass = true;if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}if (propertyNameProcessor != null) {key = propertyNameProcessor.processPropertyName(beanClass, key);}setValue(jsonObject, key, value, type, jsonConfig, bypass);} else {String warning = "Property '" + key + "' of " + beanClass + " has no read method. SKIPPED";fireWarnEvent(warning, jsonConfig);log.info(warning);}}try{if (!jsonConfig.isIgnorePublicFields()) {Field[] fields = beanClass.getFields();for (int i = 0; i < fields.length; i++) {boolean bypass = false;Field field = fields[i];String key = field.getName();if (exclusions.contains(key)){continue;}if ((jsonConfig.isIgnoreTransientFields()) && (isTransient(field, jsonConfig))){continue;}Class type = field.getType();Object value = field.get(bean);if ((jsonPropertyFilter != null) && (jsonPropertyFilter.apply(bean, key, value))) {continue;}JsonValueProcessor jsonValueProcessor = jsonConfig.findJsonValueProcessor(beanClass, type, key);if (jsonValueProcessor != null) {value = jsonValueProcessor.processObjectValue(key, value, jsonConfig);bypass = true;if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}if (propertyNameProcessor != null) {key = propertyNameProcessor.processPropertyName(beanClass, key);}setValue(jsonObject, key, value, type, jsonConfig, bypass);}}}catch (Exception e) {log.trace("Couldn't read public fields.", e);}} catch (JSONException jsone) {removeInstance(bean);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (Exception e) {removeInstance(bean);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}removeInstance(bean);fireObjectEndEvent(jsonConfig);return jsonObject;}private static JSONObject _fromDynaBean(DynaBean bean, JsonConfig jsonConfig) {if (bean == null) {fireObjectStartEvent(jsonConfig);fireObjectEndEvent(jsonConfig);return new JSONObject(true);}if (!addInstance(bean)) {try {return jsonConfig.getCycleDetectionStrategy().handleRepeatedReferenceAsObject(bean);}catch (JSONException jsone) {removeInstance(bean);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(bean);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}}fireObjectStartEvent(jsonConfig);JSONObject jsonObject = new JSONObject();try {DynaProperty[] props = bean.getDynaClass().getDynaProperties();Collection exclusions = jsonConfig.getMergedExcludes();PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();for (int i = 0; i < props.length; i++) {boolean bypass = false;DynaProperty dynaProperty = props[i];String key = dynaProperty.getName();if (exclusions.contains(key)) {continue;}Class type = dynaProperty.getType();Object value = bean.get(dynaProperty.getName());if ((jsonPropertyFilter != null) && (jsonPropertyFilter.apply(bean, key, value))) {continue;}JsonValueProcessor jsonValueProcessor = jsonConfig.findJsonValueProcessor(type, key);if (jsonValueProcessor != null) {value = jsonValueProcessor.processObjectValue(key, value, jsonConfig);bypass = true;if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}setValue(jsonObject, key, value, type, jsonConfig, bypass);}} catch (JSONException jsone) {removeInstance(bean);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(bean);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}removeInstance(bean);fireObjectEndEvent(jsonConfig);return jsonObject;}private static JSONObject _fromJSONObject(JSONObject object, JsonConfig jsonConfig) {if ((object == null) || (object.isNullObject())) {fireObjectStartEvent(jsonConfig);fireObjectEndEvent(jsonConfig);return new JSONObject(true);}if (!addInstance(object)) {try {return jsonConfig.getCycleDetectionStrategy().handleRepeatedReferenceAsObject(object);}catch (JSONException jsone) {removeInstance(object);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(object);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}}fireObjectStartEvent(jsonConfig);JSONArray sa = object.names(jsonConfig);Collection exclusions = jsonConfig.getMergedExcludes();JSONObject jsonObject = new JSONObject();PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();for (Iterator i = sa.iterator(); i.hasNext(); ) {Object k = i.next();if (k == null) {throw new JSONException("JSON keys cannot be null.");}if ((!(k instanceof String)) && (!jsonConfig.isAllowNonStringKeys())) {throw new ClassCastException("JSON keys must be strings.");}String key = String.valueOf(k);if ("null".equals(key)) {throw new NullPointerException("JSON keys must not be null nor the 'null' string.");}if (exclusions.contains(key)) {continue;}Object value = object.opt(key);if ((jsonPropertyFilter != null) && (jsonPropertyFilter.apply(object, key, value))) {continue;}if (jsonObject.properties.containsKey(key)) {jsonObject.accumulate(key, value, jsonConfig);firePropertySetEvent(key, value, true, jsonConfig);} else {jsonObject.setInternal(key, value, jsonConfig);firePropertySetEvent(key, value, false, jsonConfig);}}removeInstance(object);fireObjectEndEvent(jsonConfig);return jsonObject;}private static JSONObject _fromJSONString(JSONString string, JsonConfig jsonConfig) {return _fromJSONTokener(new JSONTokener(string.toJSONString()), jsonConfig);}private static JSONObject _fromJSONTokener(JSONTokener tokener, JsonConfig jsonConfig){try{if (tokener.matches("null.*")) {fireObjectStartEvent(jsonConfig);fireObjectEndEvent(jsonConfig);return new JSONObject(true);}if (tokener.nextClean() != '{') {throw tokener.syntaxError("A JSONObject text must begin with '{'");}fireObjectStartEvent(jsonConfig);Collection exclusions = jsonConfig.getMergedExcludes();PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();JSONObject jsonObject = new JSONObject();while (true) {char c = tokener.nextClean();switch (c) {case '\000':throw tokener.syntaxError("A JSONObject text must end with '}'");case '}':fireObjectEndEvent(jsonConfig);return jsonObject;}tokener.back();String key = tokener.nextValue(jsonConfig).toString();c = tokener.nextClean();if (c == '=') {if (tokener.next() != '>')tokener.back();}else if (c != ':') {throw tokener.syntaxError("Expected a ':' after a key");}char peek = tokener.peek();boolean quoted = (peek == '"') || (peek == '\'');Object v = tokener.nextValue(jsonConfig);if ((quoted) || (!JSONUtils.isFunctionHeader(v))) {if (exclusions.contains(key)) {switch (tokener.nextClean()) {case ',':case ';':if (tokener.nextClean() == '}') {fireObjectEndEvent(jsonConfig);return jsonObject;}tokener.back();break;case '}':fireObjectEndEvent(jsonConfig);return jsonObject;default:throw tokener.syntaxError("Expected a ',' or '}'");}}if ((jsonPropertyFilter == null) || (!jsonPropertyFilter.apply(tokener, key, v))) {if ((quoted) && ((v instanceof String)) && ((JSONUtils.mayBeJSON((String)v)) || (JSONUtils.isFunction(v)))) {v = "\"" + v + "\"";}if (jsonObject.properties.containsKey(key)) {jsonObject.accumulate(key, v, jsonConfig);firePropertySetEvent(key, v, true, jsonConfig);} else {jsonObject.element(key, v, jsonConfig);firePropertySetEvent(key, v, false, jsonConfig);}}}else {String params = JSONUtils.getFunctionParams((String)v);int i = 0;StringBuffer sb = new StringBuffer();while (true) {char ch = tokener.next();if (ch == 0) {break;}if (ch == '{') {i++;}if (ch == '}') {i--;}sb.append(ch);if (i == 0) {break;}}if (i != 0) {throw tokener.syntaxError("Unbalanced '{' or '}' on prop: " + v);}String text = sb.toString();text = text.substring(1, text.length() - 1).trim();Object value = new JSONFunction(params != null ? StringUtils.split(params, ",") : null, text);if ((jsonPropertyFilter == null) || (!jsonPropertyFilter.apply(tokener, key, value))) {if (jsonObject.properties.containsKey(key)) {jsonObject.accumulate(key, value, jsonConfig);firePropertySetEvent(key, value, true, jsonConfig);} else {jsonObject.element(key, value, jsonConfig);firePropertySetEvent(key, value, false, jsonConfig);}}}switch (tokener.nextClean()) {case ',':case ';':if (tokener.nextClean() == '}') {fireObjectEndEvent(jsonConfig);return jsonObject;}tokener.back();break;case '}':fireObjectEndEvent(jsonConfig);return jsonObject;default:throw tokener.syntaxError("Expected a ',' or '}'");}}} catch (JSONException jsone) {fireErrorEvent(jsone, jsonConfig);}throw jsone;}private static JSONObject _fromMap(Map map, JsonConfig jsonConfig){if (map == null) {fireObjectStartEvent(jsonConfig);fireObjectEndEvent(jsonConfig);return new JSONObject(true);}if (!addInstance(map)) {try {return jsonConfig.getCycleDetectionStrategy().handleRepeatedReferenceAsObject(map);}catch (JSONException jsone) {removeInstance(map);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(map);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}}fireObjectStartEvent(jsonConfig);Collection exclusions = jsonConfig.getMergedExcludes();JSONObject jsonObject = new JSONObject();PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();try {Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {boolean bypass = false;Map.Entry entry = (Map.Entry)entries.next();Object k = entry.getKey();if (k == null) {throw new JSONException("JSON keys cannot be null.");}if ((!(k instanceof String)) && (!jsonConfig.isAllowNonStringKeys())) {throw new ClassCastException("JSON keys must be strings.");}String key = String.valueOf(k);if ("null".equals(key)) {throw new NullPointerException("JSON keys must not be null nor the 'null' string.");}if (exclusions.contains(key)) {continue;}Object value = entry.getValue();if ((jsonPropertyFilter != null) && (jsonPropertyFilter.apply(map, key, value))) {continue;}if (value != null) {JsonValueProcessor jsonValueProcessor = jsonConfig.findJsonValueProcessor(value.getClass(), key);if (jsonValueProcessor != null) {value = jsonValueProcessor.processObjectValue(key, value, jsonConfig);bypass = true;if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}setValue(jsonObject, key, value, value.getClass(), jsonConfig, bypass);}else if (jsonObject.properties.containsKey(key)) {jsonObject.accumulate(key, JSONNull.getInstance());firePropertySetEvent(key, JSONNull.getInstance(), true, jsonConfig);} else {jsonObject.element(key, JSONNull.getInstance());firePropertySetEvent(key, JSONNull.getInstance(), false, jsonConfig);}}}catch (JSONException jsone) {removeInstance(map);fireErrorEvent(jsone, jsonConfig);throw jsone;} catch (RuntimeException e) {removeInstance(map);JSONException jsone = new JSONException(e);fireErrorEvent(jsone, jsonConfig);throw jsone;}removeInstance(map);fireObjectEndEvent(jsonConfig);return jsonObject;}private static JSONObject _fromString(String str, JsonConfig jsonConfig) {if ((str == null) || ("null".equals(str))) {fireObjectStartEvent(jsonConfig);fireObjectEndEvent(jsonConfig);return new JSONObject(true);}return _fromJSONTokener(new JSONTokener(str), jsonConfig);}private static Object convertPropertyValueToArray(String key, Object value, Class targetType, JsonConfig jsonConfig, Map classMap){Class innerType = JSONUtils.getInnerComponentType(targetType);Class targetInnerType = findTargetClass(key, classMap);if ((innerType.equals(Object.class)) && (targetInnerType != null) && (!targetInnerType.equals(Object.class))){innerType = targetInnerType;}JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(innerType);jsc.setClassMap(classMap);Object array = JSONArray.toArray((JSONArray)value, jsc);if ((innerType.isPrimitive()) || (JSONUtils.isNumber(innerType)) || (Boolean.class.isAssignableFrom(innerType)) || (JSONUtils.isString(innerType))){array = JSONUtils.getMorpherRegistry().morph(Array.newInstance(innerType, 0).getClass(), array);}else if (!array.getClass().equals(targetType)){if (!targetType.equals(Object.class)) {Morpher morpher = JSONUtils.getMorpherRegistry().getMorpherFor(Array.newInstance(innerType, 0).getClass());if (IdentityObjectMorpher.getInstance().equals(morpher)){ObjectArrayMorpher beanMorpher = new ObjectArrayMorpher(new BeanMorpher(innerType, JSONUtils.getMorpherRegistry()));JSONUtils.getMorpherRegistry().registerMorpher(beanMorpher);}array = JSONUtils.getMorpherRegistry().morph(Array.newInstance(innerType, 0).getClass(), array);}}return array;}private static List convertPropertyValueToList(String key, Object value, JsonConfig jsonConfig, String name, Map classMap){Class targetClass = findTargetClass(key, classMap);targetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(targetClass);jsc.setClassMap(classMap);List list = (List)JSONArray.toCollection((JSONArray)value, jsc);return list;}private static Collection convertPropertyValueToCollection(String key, Object value, JsonConfig jsonConfig, String name, Map classMap, Class collectionType){Class targetClass = findTargetClass(key, classMap);targetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;JsonConfig jsc = jsonConfig.copy();jsc.setRootClass(targetClass);jsc.setClassMap(classMap);jsc.setCollectionType(collectionType);return JSONArray.toCollection((JSONArray)value, jsc);}private static Class findTargetClass(String key, Map classMap){Class targetClass = (Class)classMap.get(key);if (targetClass == null){Iterator i = classMap.entrySet().iterator();while (i.hasNext()) {Map.Entry entry = (Map.Entry)i.next();if (RegexpUtils.getMatcher((String)entry.getKey()).matches(key)){targetClass = (Class)entry.getValue();break;}}}return targetClass;}private static boolean isTransientField(String name, Class beanClass, JsonConfig jsonConfig) {try {Field field = beanClass.getDeclaredField(name);if ((field.getModifiers() & 0x80) == 128) return true;return isTransient(field, jsonConfig);} catch (Exception e) {log.info("Error while inspecting field " + beanClass + "." + name + " for transient status.", e);}return false;}private static boolean isTransient(AnnotatedElement element, JsonConfig jsonConfig) {for (Iterator annotations = jsonConfig.getIgnoreFieldAnnotations().iterator(); annotations.hasNext(); ) {try {String annotationClassName = (String)annotations.next();if (element.getAnnotation(Class.forName(annotationClassName)) != null) return true; }catch (Exception e) {log.info("Error while inspecting " + element + " for transient status.", e);}}return false;}private static Object morphPropertyValue(String key, Object value, Class type, Class targetType) {Morpher morpher = JSONUtils.getMorpherRegistry().getMorpherFor(targetType);if (IdentityObjectMorpher.getInstance().equals(morpher)){log.warn("Can't transform property '" + key + "' from " + type.getName() + " into " + targetType.getName() + ". Will register a default Morpher");if (Enum.class.isAssignableFrom(targetType)) {JSONUtils.getMorpherRegistry().registerMorpher(new EnumMorpher(targetType));}else {JSONUtils.getMorpherRegistry().registerMorpher(new BeanMorpher(targetType, JSONUtils.getMorpherRegistry()));}}value = JSONUtils.getMorpherRegistry().morph(targetType, value);return value;}private static void setProperty(Object bean, String key, Object value, JsonConfig jsonConfig)throws Exception{PropertySetStrategy propertySetStrategy = jsonConfig.getPropertySetStrategy() != null ? jsonConfig.getPropertySetStrategy() : PropertySetStrategy.DEFAULT;propertySetStrategy.setProperty(bean, key, value, jsonConfig);}private static void setValue(JSONObject jsonObject, String key, Object value, Class type, JsonConfig jsonConfig, boolean bypass){boolean accumulated = false;if (value == null) {value = jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type);if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}if (jsonObject.properties.containsKey(key)) {if (String.class.isAssignableFrom(type)) {Object o = jsonObject.opt(key);if ((o instanceof JSONArray))((JSONArray)o).addString((String)value);elsejsonObject.properties.put(key, new JSONArray().element(o).addString((String)value));}else{jsonObject.accumulate(key, value, jsonConfig);}accumulated = true;}else if ((bypass) || (String.class.isAssignableFrom(type))) {jsonObject.properties.put(key, value);} else {jsonObject.setInternal(key, value, jsonConfig);}value = jsonObject.opt(key);if (accumulated) {JSONArray array = (JSONArray)value;value = array.get(array.size() - 1);}firePropertySetEvent(key, value, accumulated, jsonConfig);}public JSONObject(){this.properties = new ListOrderedMap();}public JSONObject(boolean isNull){this();this.nullObject = isNull;}public JSONObject accumulate(String key, boolean value){return _accumulate(key, value ? Boolean.TRUE : Boolean.FALSE, new JsonConfig());}public JSONObject accumulate(String key, double value){return _accumulate(key, Double.valueOf(value), new JsonConfig());}public JSONObject accumulate(String key, int value){return _accumulate(key, Integer.valueOf(value), new JsonConfig());}public JSONObject accumulate(String key, long value){return _accumulate(key, Long.valueOf(value), new JsonConfig());}public JSONObject accumulate(String key, Object value){return _accumulate(key, value, new JsonConfig());}public JSONObject accumulate(String key, Object value, JsonConfig jsonConfig){return _accumulate(key, value, jsonConfig);}public void accumulateAll(Map map) {accumulateAll(map, new JsonConfig());}public void accumulateAll(Map map, JsonConfig jsonConfig) {if ((map instanceof JSONObject)) {Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry)entries.next();String key = (String)entry.getKey();Object value = entry.getValue();accumulate(key, value, jsonConfig);}} else {Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry)entries.next();String key = String.valueOf(entry.getKey());Object value = entry.getValue();accumulate(key, value, jsonConfig);}}}public void clear() {this.properties.clear();}public int compareTo(Object obj) {if ((obj != null) && ((obj instanceof JSONObject))) {JSONObject other = (JSONObject)obj;int size1 = size();int size2 = other.size();if (size1 < size2)return -1;if (size1 > size2)return 1;if (equals(other)) {return 0;}}return -1;}public boolean containsKey(Object key) {return this.properties.containsKey(key);}public boolean containsValue(Object value) {return containsValue(value, new JsonConfig());}public boolean containsValue(Object value, JsonConfig jsonConfig) {try {value = processValue(value, jsonConfig);} catch (JSONException e) {return false;}return this.properties.containsValue(value);}public JSONObject discard(String key){verifyIsNull();this.properties.remove(key);return this;}public JSONObject element(String key, boolean value){verifyIsNull();return element(key, value ? Boolean.TRUE : Boolean.FALSE);}public JSONObject element(String key, Collection value){return element(key, value, new JsonConfig());}public JSONObject element(String key, Collection value, JsonConfig jsonConfig){if (!(value instanceof JSONArray)) {value = JSONArray.fromObject(value, jsonConfig);}return setInternal(key, value, jsonConfig);}public JSONObject element(String key, double value){verifyIsNull();Double d = new Double(value);JSONUtils.testValidity(d);return element(key, d);}public JSONObject element(String key, int value){verifyIsNull();return element(key, new Integer(value));}public JSONObject element(String key, long value){verifyIsNull();return element(key, new Long(value));}public JSONObject element(String key, Map value){return element(key, value, new JsonConfig());}public JSONObject element(String key, Map value, JsonConfig jsonConfig){verifyIsNull();if ((value instanceof JSONObject)) {return setInternal(key, value, jsonConfig);}return element(key, fromObject(value, jsonConfig), jsonConfig);}public JSONObject element(String key, Object value){return element(key, value, new JsonConfig());}public JSONObject element(String key, Object value, JsonConfig jsonConfig){verifyIsNull();if (key == null) {throw new JSONException("Null key.");}if (value != null) {value = processValue(key, value, jsonConfig);_setInternal(key, value, jsonConfig);} else {remove(key);}return this;}public JSONObject elementOpt(String key, Object value){return elementOpt(key, value, new JsonConfig());}public JSONObject elementOpt(String key, Object value, JsonConfig jsonConfig){verifyIsNull();if ((key != null) && (value != null)) {element(key, value, jsonConfig);}return this;}public Set entrySet() {return Collections.unmodifiableSet(this.properties.entrySet());}public boolean equals(Object obj) {if (obj == this) {return true;}if (obj == null) {return false;}if (!(obj instanceof JSONObject)) {return false;}JSONObject other = (JSONObject)obj;if (isNullObject()){return other.isNullObject();}if (other.isNullObject()) {return false;}if (other.size() != size()) {return false;}Iterator keys = this.properties.keySet().iterator();while (keys.hasNext()) {String key = (String)keys.next();if (!other.properties.containsKey(key)) {return false;}Object o1 = this.properties.get(key);Object o2 = other.properties.get(key);if (JSONNull.getInstance().equals(o1)){if (!JSONNull.getInstance().equals(o2)){return false;}}if (JSONNull.getInstance().equals(o2)){return false;}if (((o1 instanceof String)) && ((o2 instanceof JSONFunction))) {if (!o1.equals(String.valueOf(o2)))return false;}else if (((o1 instanceof JSONFunction)) && ((o2 instanceof String))) {if (!o2.equals(String.valueOf(o1)))return false;}else if (((o1 instanceof JSONObject)) && ((o2 instanceof JSONObject))) {if (!o1.equals(o2))return false;}else if (((o1 instanceof JSONArray)) && ((o2 instanceof JSONArray))) {if (!o1.equals(o2))return false;}else if (((o1 instanceof JSONFunction)) && ((o2 instanceof JSONFunction))) {if (!o1.equals(o2)) {return false;}}else if ((o1 instanceof String)) {if (!o1.equals(String.valueOf(o2)))return false;}else if ((o2 instanceof String)) {if (!o2.equals(String.valueOf(o1)))return false;}else {Morpher m1 = JSONUtils.getMorpherRegistry().getMorpherFor(o1.getClass());Morpher m2 = JSONUtils.getMorpherRegistry().getMorpherFor(o2.getClass());if ((m1 != null) && (m1 != IdentityObjectMorpher.getInstance())) {if (!o1.equals(JSONUtils.getMorpherRegistry().morph(o1.getClass(), o2))){return false;}} else if ((m2 != null) && (m2 != IdentityObjectMorpher.getInstance())) {if (!JSONUtils.getMorpherRegistry().morph(o1.getClass(), o1).equals(o2)){return false;}}else if (!o1.equals(o2)) {return false;}}}return true;}public Object get(Object key) {if ((key instanceof String)) {return get((String)key);}return null;}public Object get(String key){verifyIsNull();return this.properties.get(key);}public boolean getBoolean(String key){verifyIsNull();Object o = get(key);if (o != null) {if ((o.equals(Boolean.FALSE)) || (((o instanceof String)) && (((String)o).equalsIgnoreCase("false")))){return false;}if ((o.equals(Boolean.TRUE)) || (((o instanceof String)) && (((String)o).equalsIgnoreCase("true")))){return true;}}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a Boolean.");}public double getDouble(String key){verifyIsNull();Object o = get(key);if (o != null) {try {return (o instanceof Number) ? ((Number)o).doubleValue() : Double.parseDouble((String)o);}catch (Exception e) {throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");}}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");}public int getInt(String key){verifyIsNull();Object o = get(key);if (o != null) {return (o instanceof Number) ? ((Number)o).intValue() : (int)getDouble(key);}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");}public JSONArray getJSONArray(String key){verifyIsNull();Object o = get(key);if ((o != null) && ((o instanceof JSONArray))) {return (JSONArray)o;}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a JSONArray.");}public JSONObject getJSONObject(String key){verifyIsNull();Object o = get(key);if (JSONNull.getInstance().equals(o)){return new JSONObject(true);}if ((o instanceof JSONObject)) {return (JSONObject)o;}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a JSONObject.");}public long getLong(String key){verifyIsNull();Object o = get(key);if (o != null) {return (o instanceof Number) ? ((Number)o).longValue() : ()getDouble(key);}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");}public String getString(String key){verifyIsNull();Object o = get(key);if (o != null) {return o.toString();}throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] not found.");}public boolean has(String key){verifyIsNull();return this.properties.containsKey(key);}public int hashCode() {int hashcode = 19;if (isNullObject()) {return hashcode + JSONNull.getInstance().hashCode();}Iterator entries = this.properties.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry)entries.next();Object key = entry.getKey();Object value = entry.getValue();hashcode += key.hashCode() + JSONUtils.hashCode(value);}return hashcode;}public boolean isArray() {return false;}public boolean isEmpty(){return this.properties.isEmpty();}public boolean isNullObject(){return this.nullObject;}public Iterator keys(){verifyIsNull();return keySet().iterator();}public Set keySet() {return Collections.unmodifiableSet(this.properties.keySet());}public JSONArray names(){verifyIsNull();JSONArray ja = new JSONArray();Iterator keys = keys();while (keys.hasNext()) {ja.element(keys.next());}return ja;}public JSONArray names(JsonConfig jsonConfig){verifyIsNull();JSONArray ja = new JSONArray();Iterator keys = keys();while (keys.hasNext()) {ja.element(keys.next(), jsonConfig);}return ja;}public Object opt(String key){verifyIsNull();return key == null ? null : this.properties.get(key);}public boolean optBoolean(String key){verifyIsNull();return optBoolean(key, false);}public boolean optBoolean(String key, boolean defaultValue){verifyIsNull();try {return getBoolean(key); } catch (Exception e) {}return defaultValue;}public double optDouble(String key){verifyIsNull();return optDouble(key, (0.0D / 0.0D));}public double optDouble(String key, double defaultValue){verifyIsNull();try {Object o = opt(key);return (o instanceof Number) ? ((Number)o).doubleValue() : new Double((String)o).doubleValue();} catch (Exception e) {}return defaultValue;}public int optInt(String key){verifyIsNull();return optInt(key, 0);}public int optInt(String key, int defaultValue){verifyIsNull();try {return getInt(key); } catch (Exception e) {}return defaultValue;}public JSONArray optJSONArray(String key){verifyIsNull();Object o = opt(key);return (o instanceof JSONArray) ? (JSONArray)o : null;}public JSONObject optJSONObject(String key){verifyIsNull();Object o = opt(key);return (o instanceof JSONObject) ? (JSONObject)o : null;}public long optLong(String key){verifyIsNull();return optLong(key, 0L);}public long optLong(String key, long defaultValue){verifyIsNull();try {return getLong(key); } catch (Exception e) {}return defaultValue;}public String optString(String key){verifyIsNull();return optString(key, "");}public String optString(String key, String defaultValue){verifyIsNull();Object o = opt(key);return o != null ? o.toString() : defaultValue;}public Object put(Object key, Object value) {if (key == null) {throw new IllegalArgumentException("key is null.");}Object previous = this.properties.get(key);element(String.valueOf(key), value);return previous;}public void putAll(Map map) {putAll(map, new JsonConfig());}public void putAll(Map map, JsonConfig jsonConfig) {if ((map instanceof JSONObject)) {Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry)entries.next();String key = (String)entry.getKey();Object value = entry.getValue();this.properties.put(key, value);}} else {Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry)entries.next();String key = String.valueOf(entry.getKey());Object value = entry.getValue();element(key, value, jsonConfig);}}}public Object remove(Object key) {return this.properties.remove(key);}public Object remove(String key){verifyIsNull();return this.properties.remove(key);}public int size(){return this.properties.size();}public JSONArray toJSONArray(JSONArray names){verifyIsNull();if ((names == null) || (names.size() == 0)) {return null;}JSONArray ja = new JSONArray();for (int i = 0; i < names.size(); i++) {ja.element(opt(names.getString(i)));}return ja;}public String toString(){if (isNullObject()) {return JSONNull.getInstance().toString();}try{Iterator keys = keys();StringBuffer sb = new StringBuffer("{");while (keys.hasNext()) {if (sb.length() > 1) {sb.append(',');}Object o = keys.next();sb.append(JSONUtils.quote(o.toString()));sb.append(':');sb.append(JSONUtils.valueToString(this.properties.get(o)));}sb.append('}');return sb.toString(); } catch (Exception e) {}return null;}public String toString(int indentFactor){if (isNullObject()) {return JSONNull.getInstance().toString();}if (indentFactor == 0) {return toString();}return toString(indentFactor, 0);}public String toString(int indentFactor, int indent){if (isNullObject()) {return JSONNull.getInstance().toString();}int n = size();if (n == 0) {return "{}";}if (indentFactor == 0) {return toString();}Iterator keys = keys();StringBuffer sb = new StringBuffer("{");int newindent = indent + indentFactor;if (n == 1) {Object o = keys.next();sb.append(JSONUtils.quote(o.toString()));sb.append(": ");sb.append(JSONUtils.valueToString(this.properties.get(o), indentFactor, indent));} else {while (keys.hasNext()) {Object o = keys.next();if (sb.length() > 1)sb.append(",\n");else {sb.append('\n');}for (int i = 0; i < newindent; i++) {sb.append(' ');}sb.append(JSONUtils.quote(o.toString()));sb.append(": ");sb.append(JSONUtils.valueToString(this.properties.get(o), indentFactor, newindent));}if (sb.length() > 1) {sb.append('\n');for (int i = 0; i < indent; i++) {sb.append(' ');}}for (int i = 0; i < indent; i++) {sb.insert(0, ' ');}}sb.append('}');return sb.toString();}public Collection values() {return Collections.unmodifiableCollection(this.properties.values());}public Writer write(Writer writer){try{if (isNullObject()) {writer.write(JSONNull.getInstance().toString());return writer;}boolean b = false;Iterator keys = keys();writer.write(123);while (keys.hasNext()) {if (b) {writer.write(44);}Object k = keys.next();writer.write(JSONUtils.quote(k.toString()));writer.write(58);Object v = this.properties.get(k);if ((v instanceof JSONObject))((JSONObject)v).write(writer);else if ((v instanceof JSONArray))((JSONArray)v).write(writer);else {writer.write(JSONUtils.valueToString(v));}b = true;}writer.write(125);return writer; } catch (IOException e) {}throw new JSONException(e);}private JSONObject _accumulate(String key, Object value, JsonConfig jsonConfig){if (isNullObject()) {throw new JSONException("Can't accumulate on null object");}if (!has(key)) {setInternal(key, value, jsonConfig);} else {Object o = opt(key);if ((o instanceof JSONArray))((JSONArray)o).element(value, jsonConfig);else {setInternal(key, new JSONArray().element(o).element(value, jsonConfig), jsonConfig);}}return this;}protected Object _processValue(Object value, JsonConfig jsonConfig) {if ((value instanceof JSONTokener))return _fromJSONTokener((JSONTokener)value, jsonConfig);if ((value != null) && (Enum.class.isAssignableFrom(value.getClass()))) {return ((Enum)value).name();}return super._processValue(value, jsonConfig);}private JSONObject _setInternal(String key, Object value, JsonConfig jsonConfig){verifyIsNull();if (key == null) {throw new JSONException("Null key.");}if ((JSONUtils.isString(value)) && (JSONUtils.mayBeJSON(String.valueOf(value)))) {this.properties.put(key, value);}else if ((CycleDetectionStrategy.IGNORE_PROPERTY_OBJ != value) && (CycleDetectionStrategy.IGNORE_PROPERTY_ARR != value)){this.properties.put(key, value);}return this;}private Object processValue(Object value, JsonConfig jsonConfig) {if (value != null) {JsonValueProcessor processor = jsonConfig.findJsonValueProcessor(value.getClass());if (processor != null) {value = processor.processObjectValue(null, value, jsonConfig);if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}}return _processValue(value, jsonConfig);}private Object processValue(String key, Object value, JsonConfig jsonConfig) {if (value != null) {JsonValueProcessor processor = jsonConfig.findJsonValueProcessor(value.getClass(), key);if (processor != null) {value = processor.processObjectValue(null, value, jsonConfig);if (!JsonVerifier.isValidJsonValue(value)) {throw new JSONException("Value is not a valid JSON value. " + value);}}}return _processValue(value, jsonConfig);}private JSONObject setInternal(String key, Object value, JsonConfig jsonConfig){return _setInternal(key, processValue(key, value, jsonConfig), jsonConfig);}private void verifyIsNull(){if (isNullObject())throw new JSONException("null object");}
}
这篇关于throw new JSONException(JSONObject[ + JSONUtils.quote(key) + ] is not a number.);的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!