fastjson List转JSONArray以及JSONArray转List

一:fastjson  JSONArray、字符串转List

  1.  之前使用的是如下方法:
        /**
         * @since  1.2.23
         */
        public <T> List<T> toJavaList(Class<T> clazz) {
            List<T> list = new ArrayList<T>(this.size());
    
            ParserConfig config = ParserConfig.getGlobalInstance();
    
            for (Object item : this) {
                T classItem = (T) TypeUtils.cast(item, clazz, config);
                list.add(classItem);
            }
    
            return list;
        }
  2. 后来,阿里云上检测到 【漏洞预警】fastjson < 1.2.61 反序列化远程代码执行漏洞

    于是,升级了版本到 1.2.8.然后上面那个方法也被删除了。便使用 parseArray 方法

public static <T> List<T> parseArray(String text, Class<T> clazz) {
        if (text == null) {
            return null;
        }

        List<T> list;

        DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance());
        JSONLexer lexer = parser.lexer;
        int token = lexer.token();
        if (token == JSONToken.NULL) {
            lexer.nextToken();
            list = null;
        } else if (token == JSONToken.EOF && lexer.isBlankInput()) {
            list = null;
        } else {
            list = new ArrayList<T>();
            parser.parseArray(clazz, list);

            parser.handleResovleTask(list);
        }

        parser.close();

        return list;
    }
JSONObject repayPlan = getRepayPlan(); // 具体的业务实现
List<TestBo> list = JSONObject.parseArray(repayPlan.getJSONArray("plan").toJSONString(), TestBo.class);

 

二.fastjson  List 转 JSONArray

List<T> list = new ArrayList<T>();
JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));

 public static JSONArray parseArray(String text) {
        if (text == null) {
            return null;
        } else {
            DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance());
            JSONLexer lexer = parser.getLexer();
            JSONArray array;
            if (lexer.token() == 8) {
                lexer.nextToken();
                array = null;
            } else if (lexer.token() == 20) {
                array = null;
            } else {
                array = new JSONArray();
                parser.parseArray(array);
                parser.handleResovleTask(array);
            }

            parser.close();
            return array;
        }
    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值