zoukankan      html  css  js  c++  java
  • Java-Class-I:com.alibaba.fastjson.JSONObject.java

    ylbtech-Java-Class-I:com.alibaba.fastjson.JSONObject.java
    1.返回顶部

    1.1、
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    1.2、
    String objJSON = "{'key':'value'}";
    JSONObject responseObj = JSON.parseObject(objJSON);
    String key = responseObj.getString("key");
    2、

    2.返回顶部
     
    3.返回顶部
     
    4.返回顶部
    1、
    /*
     * Copyright 1999-2017 Alibaba Group.
     *
     * 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.
     */
    package com.alibaba.fastjson;
    
    import static com.alibaba.fastjson.util.TypeUtils.castToBigDecimal;
    import static com.alibaba.fastjson.util.TypeUtils.castToBigInteger;
    import static com.alibaba.fastjson.util.TypeUtils.castToBoolean;
    import static com.alibaba.fastjson.util.TypeUtils.castToByte;
    import static com.alibaba.fastjson.util.TypeUtils.castToBytes;
    import static com.alibaba.fastjson.util.TypeUtils.castToDate;
    import static com.alibaba.fastjson.util.TypeUtils.castToDouble;
    import static com.alibaba.fastjson.util.TypeUtils.castToFloat;
    import static com.alibaba.fastjson.util.TypeUtils.castToInt;
    import static com.alibaba.fastjson.util.TypeUtils.castToLong;
    import static com.alibaba.fastjson.util.TypeUtils.castToShort;
    import static com.alibaba.fastjson.util.TypeUtils.castToSqlDate;
    import static com.alibaba.fastjson.util.TypeUtils.castToTimestamp;
    
    import java.io.*;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Type;
    import java.math.BigDecimal;
    import java.math.BigInteger;
    import java.util.Collection;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Set;
    
    import com.alibaba.fastjson.annotation.JSONField;
    import com.alibaba.fastjson.parser.ParserConfig;
    import com.alibaba.fastjson.util.TypeUtils;
    
    /**
     * @author wenshao[szujobs@hotmail.com]
     */
    public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {
    
        private static final long         serialVersionUID         = 1L;
        private static final int          DEFAULT_INITIAL_CAPACITY = 16;
    
        private final Map<String, Object> map;
    
        public JSONObject(){
            this(DEFAULT_INITIAL_CAPACITY, false);
        }
    
        public JSONObject(Map<String, Object> map){
            if (map == null) {
                throw new IllegalArgumentException("map is null.");
            }
            this.map = map;
        }
    
        public JSONObject(boolean ordered){
            this(DEFAULT_INITIAL_CAPACITY, ordered);
        }
    
        public JSONObject(int initialCapacity){
            this(initialCapacity, false);
        }
    
        public JSONObject(int initialCapacity, boolean ordered){
            if (ordered) {
                map = new LinkedHashMap<String, Object>(initialCapacity);
            } else {
                map = new HashMap<String, Object>(initialCapacity);
            }
        }
    
        public int size() {
            return map.size();
        }
    
        public boolean isEmpty() {
            return map.isEmpty();
        }
    
        public boolean containsKey(Object key) {
            return map.containsKey(key);
        }
    
        public boolean containsValue(Object value) {
            return map.containsValue(value);
        }
    
        public Object get(Object key) {
            Object val = map.get(key);
    
            if (val == null && key instanceof Number) {
                val = map.get(key.toString());
            }
    
            return val;
        }
    
        public JSONObject getJSONObject(String key) {
            Object value = map.get(key);
    
            if (value instanceof JSONObject) {
                return (JSONObject) value;
            }
    
            if (value instanceof String) {
                return JSON.parseObject((String) value);
            }
    
            return (JSONObject) toJSON(value);
        }
    
        public JSONArray getJSONArray(String key) {
            Object value = map.get(key);
    
            if (value instanceof JSONArray) {
                return (JSONArray) value;
            }
    
            if (value instanceof String) {
                return (JSONArray) JSON.parse((String) value);
            }
    
            return (JSONArray) toJSON(value);
        }
    
        public <T> T getObject(String key, Class<T> clazz) {
            Object obj = map.get(key);
            return TypeUtils.castToJavaBean(obj, clazz);
        }
    
        public <T> T getObject(String key, Type type) {
            Object obj = map.get(key);
            return TypeUtils.cast(obj, type, ParserConfig.getGlobalInstance());
        }
    
        public <T> T getObject(String key, TypeReference typeReference) {
            Object obj = map.get(key);
            if (typeReference == null) {
                return (T) obj;
            }
            return TypeUtils.cast(obj, typeReference.getType(), ParserConfig.getGlobalInstance());
        }
    
        public Boolean getBoolean(String key) {
            Object value = get(key);
    
            if (value == null) {
                return null;
            }
    
            return castToBoolean(value);
        }
    
        public byte[] getBytes(String key) {
            Object value = get(key);
    
            if (value == null) {
                return null;
            }
    
            return castToBytes(value);
        }
    
        public boolean getBooleanValue(String key) {
            Object value = get(key);
    
            Boolean booleanVal = castToBoolean(value);
            if (booleanVal == null) {
                return false;
            }
    
            return booleanVal.booleanValue();
        }
    
        public Byte getByte(String key) {
            Object value = get(key);
    
            return castToByte(value);
        }
    
        public byte getByteValue(String key) {
            Object value = get(key);
    
            Byte byteVal = castToByte(value);
            if (byteVal == null) {
                return 0;
            }
    
            return byteVal.byteValue();
        }
    
        public Short getShort(String key) {
            Object value = get(key);
    
            return castToShort(value);
        }
    
        public short getShortValue(String key) {
            Object value = get(key);
    
            Short shortVal = castToShort(value);
            if (shortVal == null) {
                return 0;
            }
    
            return shortVal.shortValue();
        }
    
        public Integer getInteger(String key) {
            Object value = get(key);
    
            return castToInt(value);
        }
    
        public int getIntValue(String key) {
            Object value = get(key);
    
            Integer intVal = castToInt(value);
            if (intVal == null) {
                return 0;
            }
    
            return intVal.intValue();
        }
    
        public Long getLong(String key) {
            Object value = get(key);
    
            return castToLong(value);
        }
    
        public long getLongValue(String key) {
            Object value = get(key);
    
            Long longVal = castToLong(value);
            if (longVal == null) {
                return 0L;
            }
    
            return longVal.longValue();
        }
    
        public Float getFloat(String key) {
            Object value = get(key);
    
            return castToFloat(value);
        }
    
        public float getFloatValue(String key) {
            Object value = get(key);
    
            Float floatValue = castToFloat(value);
            if (floatValue == null) {
                return 0F;
            }
    
            return floatValue.floatValue();
        }
    
        public Double getDouble(String key) {
            Object value = get(key);
    
            return castToDouble(value);
        }
    
        public double getDoubleValue(String key) {
            Object value = get(key);
    
            Double doubleValue = castToDouble(value);
            if (doubleValue == null) {
                return 0D;
            }
    
            return doubleValue.doubleValue();
        }
    
        public BigDecimal getBigDecimal(String key) {
            Object value = get(key);
    
            return castToBigDecimal(value);
        }
    
        public BigInteger getBigInteger(String key) {
            Object value = get(key);
    
            return castToBigInteger(value);
        }
    
        public String getString(String key) {
            Object value = get(key);
    
            if (value == null) {
                return null;
            }
    
            return value.toString();
        }
    
        public Date getDate(String key) {
            Object value = get(key);
    
            return castToDate(value);
        }
    
        public java.sql.Date getSqlDate(String key) {
            Object value = get(key);
    
            return castToSqlDate(value);
        }
    
        public java.sql.Timestamp getTimestamp(String key) {
            Object value = get(key);
    
            return castToTimestamp(value);
        }
        
        public Object put(String key, Object value) {
            return map.put(key, value);
        }
        
        public JSONObject fluentPut(String key, Object value) {
            map.put(key, value);
            return this;
        }
    
        public void putAll(Map<? extends String, ? extends Object> m) {
            map.putAll(m);
        }
    
        public JSONObject fluentPutAll(Map<? extends String, ? extends Object> m) {
            map.putAll(m);
            return this;
        }
    
        public void clear() {
            map.clear();
        }
    
        public JSONObject fluentClear() {
            map.clear();
            return this;
        }
    
        public Object remove(Object key) {
            return map.remove(key);
        }
    
        public JSONObject fluentRemove(Object key) {
            map.remove(key);
            return this;
        }
    
        public Set<String> keySet() {
            return map.keySet();
        }
    
        public Collection<Object> values() {
            return map.values();
        }
    
        public Set<Map.Entry<String, Object>> entrySet() {
            return map.entrySet();
        }
    
        @Override
        public Object clone() {
            return new JSONObject(map instanceof LinkedHashMap //
                                  ? new LinkedHashMap<String, Object>(map) //
                                      : new HashMap<String, Object>(map)
                                      );
        }
    
        public boolean equals(Object obj) {
            return this.map.equals(obj);
        }
    
        public int hashCode() {
            return this.map.hashCode();
        }
    
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Class<?>[] parameterTypes = method.getParameterTypes();
            if (parameterTypes.length == 1) {
                if (method.getName().equals("equals")) {
                    return this.equals(args[0]);
                }
                
                Class<?> returnType = method.getReturnType();
                if (returnType != void.class) {
                    throw new JSONException("illegal setter");
                }
    
                String name = null;
                JSONField annotation = method.getAnnotation(JSONField.class);
                if (annotation != null) {
                    if (annotation.name().length() != 0) {
                        name = annotation.name();
                    }
                }
    
                if (name == null) {
                    name = method.getName();
                    
                    if (!name.startsWith("set")) {
                        throw new JSONException("illegal setter");
                    }
    
                    name = name.substring(3);
                    if (name.length() == 0) {
                        throw new JSONException("illegal setter");
                    }
                    name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
                }
    
                map.put(name, args[0]);
                return null;
            }
    
            if (parameterTypes.length == 0) {
                Class<?> returnType = method.getReturnType();
                if (returnType == void.class) {
                    throw new JSONException("illegal getter");
                }
    
                String name = null;
                JSONField annotation = method.getAnnotation(JSONField.class);
                if (annotation != null) {
                    if (annotation.name().length() != 0) {
                        name = annotation.name();
                    }
                }
    
                if (name == null) {
                    name = method.getName();
                    if (name.startsWith("get")) {
                        name = name.substring(3);
                        if (name.length() == 0) {
                            throw new JSONException("illegal getter");
                        }
                        name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
                    } else if (name.startsWith("is")) {
                        name = name.substring(2);
                        if (name.length() == 0) {
                            throw new JSONException("illegal getter");
                        }
                        name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
                    } else if (name.startsWith("hashCode")) {
                        return this.hashCode();
                    } else if (name.startsWith("toString")) {
                        return this.toString();
                    } else {
                        throw new JSONException("illegal getter");
                    }
                }
                
                Object value = map.get(name);
                return TypeUtils.cast(value, method.getGenericReturnType(), ParserConfig.getGlobalInstance());
            }
    
            throw new UnsupportedOperationException(method.toGenericString());
        }
    
        public Map<String, Object> getInnerMap() {
            return this.map;
        }
    
    
    
        private void readObject(final java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
            SecureObjectInputStream.ensureFields();
            if (SecureObjectInputStream.fields != null && !SecureObjectInputStream.fields_error) {
                ObjectInputStream secIn = new SecureObjectInputStream(in);
                try {
                    secIn.defaultReadObject();
                    return;
                } catch (java.io.NotActiveException e) {
                    // skip
                }
            }
    
            in.defaultReadObject();
            for (Entry entry : map.entrySet()) {
                final Object key = entry.getKey();
                if (key != null) {
                    ParserConfig.global.checkAutoType(key.getClass());
                }
    
                final Object value = entry.getValue();
                if (value != null) {
                    ParserConfig.global.checkAutoType(value.getClass());
                }
            }
        }
    
        static class SecureObjectInputStream extends ObjectInputStream {
            static Field[] fields;
            static volatile boolean fields_error;
    
            static void ensureFields() {
                if (fields == null && !fields_error) {
                    try {
                        final Field[] declaredFields = ObjectInputStream.class.getDeclaredFields();
                        String[] fieldnames = new String[]{"bin", "passHandle", "handles", "curContext"};
                        Field[] array = new Field[fieldnames.length];
                        for (int i = 0; i < fieldnames.length; i++) {
                            Field field = TypeUtils
                                    .getField(ObjectInputStream.class
                                            , fieldnames[i]
                                            , declaredFields
                                    );
                            field.setAccessible(true);
                            array[i] = field;
                        }
                        fields = array;
                    } catch (Throwable error) {
                        fields_error = true;
                    }
                }
            }
    
            public SecureObjectInputStream(ObjectInputStream in) throws IOException {
                super(in);
                try {
                    for (int i = 0; i < fields.length; i++) {
                        final Field field = fields[i];
                        final Object value = field.get(in);
                        field.set(this, value);
                    }
                } catch (IllegalAccessException e) {
                    fields_error = true;
                }
            }
    
            protected Class<?> resolveClass(ObjectStreamClass desc)
            throws IOException, ClassNotFoundException {
                String name = desc.getName();
                if (name.length() > 2) {
                    int index = name.lastIndexOf('[');
                    if (index != -1) {
                        name = name.substring(index + 1);
                    }
                    if (name.length() > 2 && name.charAt(0) == 'L' && name.charAt(name.length() - 1) == ';') {
                        name = name.substring(1, name.length() - 1);
                    }
                    ParserConfig.global.checkAutoType(name, null);
                }
                return super.resolveClass(desc);
            }
    
            protected Class<?> resolveProxyClass(String[] interfaces)
            throws IOException, ClassNotFoundException {
                for (String interfacename : interfaces) {
                    //检查是否处于黑名单
                    ParserConfig.global.checkAutoType(interfacename, null);
                }
                return super.resolveProxyClass(interfaces);
            }
    
            //Hack:默认构造方法会调用这个方法,重写此方法使用反射还原部分关键属性
            protected void readStreamHeader() throws IOException, StreamCorruptedException {
    
            }
        }
    }
    2、
    5.返回顶部
     
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    PHPUnit断言详情
    dev tools杂谈
    sublime text3 + python3.5 ide
    文件传输接收sz、rz命令用法
    Linux编辑器vi使用方法详细介绍
    vi编辑字符串替换及sed用法
    Selenium实战(一)——浏览器实例
    Python的数据库连接
    Cypress测试框架——一个简单的测试用例
    Cypress测试框架——入门1
  • 原文地址:https://www.cnblogs.com/storebook/p/11095674.html
Copyright © 2011-2022 走看看