private List parseArray()

in odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterProxy.java [438:613]


    private List parseArray(JSONArray jsonArray, ArrayTypeInfo arrayTypeInfo) throws ParseException {
        if (null == jsonArray) {
            return null;
        }
        List result = new ArrayList();
        switch (arrayTypeInfo.getElementTypeInfo().getOdpsType()) {
        case BIGINT:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getLong(i));
            }
            return result;
        /**
         * 双精度浮点
         */
        case DOUBLE:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getDouble(i));
            }
            return result;
        /**
         * 布尔型
         */
        case BOOLEAN:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getBoolean(i));
            }
            return result;
        /**
         * 日期类型
         */
        case DATETIME:
            // TODO 精度
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(dateFormat.parse(jsonArray.getString(i)));
            }
            return result;
        /**
         * 字符串类型
         */
        case STRING:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getString(i));
            }
            return result;
        /**
         * 精确小数类型
         */
        case DECIMAL:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getBigDecimal(i));
            }
            return result;
        /**
         * 1字节有符号整型
         */
        case TINYINT:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getByte(i));
            }
            return result;
        /**
         * 2字节有符号整型
         */
        case SMALLINT:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getShort(i));
            }
            return result;
        /**
         * 4字节有符号整型
         */
        case INT:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getInteger(i));
            }
            return result;
        /**
         * 单精度浮点
         */
        case FLOAT:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(jsonArray.getFloat(i));
            }
            return result;
        /**
         * 固定长度字符串
         */
        case CHAR:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(new Char(jsonArray.getString(i),
                        ((CharTypeInfo) arrayTypeInfo.getElementTypeInfo()).getLength()));
            }
            return result;
        /**
         * 可变长度字符串
         */
        case VARCHAR:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(new Varchar(jsonArray.getString(i),
                        ((VarcharTypeInfo) arrayTypeInfo.getElementTypeInfo()).getLength()));
            }
            return result;
        /**
         * 时间类型
         */
        case DATE:
            // TODO string -> date need timezone
            // TODO how to use odps Record
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(java.sql.Date.valueOf(jsonArray.getString(i)));
            }
            return result;
        /**
         * 时间戳
         */
        case TIMESTAMP:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(Timestamp.valueOf(jsonArray.getString(i)));
            }
            return result;
        /**
         * 字节数组
         */
        case BINARY:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(Base64.decodeBase64(jsonArray.getString(i)));
            }
            return result;
        /**
         * 日期间隔
         */
        case INTERVAL_DAY_TIME:
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject json = jsonArray.getJSONObject(i);
                result.add(new IntervalDayTime(json.getInteger("totalSeconds"), json.getInteger("nanos")));
            }
            return result;
        /**
         * 年份间隔
         */
        case INTERVAL_YEAR_MONTH:
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject json = jsonArray.getJSONObject(i);
                result.add(new IntervalYearMonth(json.getInteger("years"), json.getInteger("months")));
            }
            return result;
        /**
         * 结构体
         */
        case STRUCT:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(
                        parseStruct(jsonArray.getJSONObject(i), (StructTypeInfo) arrayTypeInfo.getElementTypeInfo()));
            }
            return result;
        /**
         * MAP类型
         */
        case MAP:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(parseMap(jsonArray.getJSONObject(i), (MapTypeInfo) arrayTypeInfo.getElementTypeInfo()));
            }
            return result;
        /**
         * ARRAY类型
         */
        case ARRAY:
            for (int i = 0; i < jsonArray.size(); i++) {
                result.add(parseArray(jsonArray.getJSONArray(i), (ArrayTypeInfo) arrayTypeInfo.getElementTypeInfo()));
            }
            return result;

        default:
            return result;
        }
    }