获取Json的值通过正则或Json解析器哪个快?

2019-02-28  本文已影响0人  阿丘山

假设,我们从一个json中拿一个key的值,这个key唯一或者拿第一个出现的,我们用哪个更快一些?

Json字符串为请求接口返回的,多填充了一些字符

String jsonstr="{\"errCode\":\"0000\",\"retStatus\":\"1\",\"errMsg\":\"查询成功\",\"result\":{\"RecordCount\":9,\"Datas\":[{\"SFRemark\":\"-\",\"Col_003\":\"12346100108\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳腾讯\",\"Col_051\":\"杭州阿里\",\"Col_050\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_061\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市字符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_052\":\"天津天津市南开区符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_004\":1,\"Col_098\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_056\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_014\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_006\":1.0,\"Col_054\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_046\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_053\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_092\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_117\":\"深圳腾讯\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_316\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_317\":0,\"Col_291\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_318\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_076\":\"2019-02-21 17:26:00\",\"Col_109\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_062\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_063\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_106\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_281\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_282\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_107\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_108\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_113\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_328\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_329\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_263\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_423\":null,\"Col_422\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"COMPANYNO\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Scry\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"ScTel\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"SCAssistantN\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"SCAssistantT\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"DD_117\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"DD_118\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"sys_guid\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_360\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"MO_012\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_209\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"FlightNo\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"FlightTime\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_262\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\",\"Col_415\":\"符填充字符填充字符填充字符填充字符填充字符填充字符填充\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000196\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 15:37:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000190\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"上海达九\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"上海上海市闵行区浦锦街道李巷村联航路1818弄14号3楼\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 14:19:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000194\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 14:53:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000191\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 14:32:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000197\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 17:18:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000193\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 14:44:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000195\",\"Col_007\":\"隔日达\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":1.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 15:04:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"},{\"SFRemark\":\"-\",\"Col_003\":\"12346000192\",\"Col_007\":\"陆运件\",\"Col_043\":\"深圳飞月\",\"Col_051\":\"天津谛诺\",\"Col_050\":\"\",\"Col_061\":\"\",\"IsOvertime\":1,\"Col_044\":\"广东省深圳市宝安区福海街道和平社区桥和路38号\",\"Col_052\":\"天津天津市南开区万兴街道三潭西里社区天津市南开区中关村e谷08室\",\"Col_004\":1,\"Col_098\":\"\",\"Col_056\":\"\",\"Col_014\":\"\",\"Col_006\":100.0,\"Col_054\":\"\",\"Col_046\":\"\",\"Col_053\":\"\",\"Col_092\":\"\",\"Col_117\":\"深圳飞月\",\"Col_031\":\"寄方付\",\"Col_064\":\"无\",\"Col_315\":\"\",\"Col_316\":\"\",\"Col_317\":0,\"Col_291\":\"\",\"Col_318\":\"\",\"Col_076\":\"2019-02-21 14:37:00\",\"Col_109\":\"\",\"Col_062\":\"\",\"Col_063\":\"\",\"Col_106\":\"\",\"Col_281\":\"\",\"Col_282\":\"\",\"Col_107\":\"\",\"Col_108\":\"\",\"Col_113\":\"\",\"Col_328\":\"\",\"Col_329\":\"\",\"Col_263\":\"\",\"Col_423\":null,\"Col_422\":\"\",\"COMPANYNO\":\"\",\"Scry\":\"\",\"ScTel\":\"\",\"SCAssistantN\":\"\",\"SCAssistantT\":\"\",\"DD_117\":\"\",\"DD_118\":\"\",\"sys_guid\":\"\",\"Col_360\":\"\",\"MO_012\":\"\",\"Col_209\":\"\",\"FlightNo\":\"\",\"FlightTime\":\"\",\"Col_262\":\"\",\"Col_415\":\"\"}]}}";

1、我们使用正则表达式"key":"?"来拿取

long begin = System.currentTimeMillis();
String s1 = JsonRegUtil.getJsonString(jsonstr, "Col_117");
String s2 = JsonRegUtil.getJsonString(jsonstr, "Col_051");
System.out.println(s1);
System.out.println(s2);
long end = System.currentTimeMillis();

2、使用FastJson解析器,一层一层解析,然后拿到关键字的值

long begin2 = System.currentTimeMillis();
JSONObject omsObj = JSONObject.parseObject(jsonstr);
JSONObject result = omsObj.getJSONObject("result");
JSONArray datas = result.getJSONArray("Datas");
JSONObject jsonObject = datas.getJSONObject(0);
String Col_117 = jsonObject.getString("Col_117");
String Col_051 = jsonObject.getString("Col_051");
System.out.println(Col_117);
System.out.println(Col_051);
long end2 = System.currentTimeMillis();

打印结果

System.out.println("正则:"+(end-begin));
System.out.println("json解析:"+(end2-begin2));

结果发现:正则真的很快,0ms都有出现

image

当然,正则匹配比较呆板,适用场景不多,只适合拿取某个大json的时候获取值。

附上正则:

     /**
     * 获取 String 类型的value
     * @param jsonstr
     * @param key
     */
    public static String getJsonString(String jsonstr,String key) {
        String regex = "\""+key+"\":\"(.*?)\"";//使用非贪婪模式
        Matcher matcher = Pattern.compile(regex).matcher(jsonstr);
        while (matcher.find()) {
            //set.add(matcher.group(1));
            return matcher.group(1);
        }
        return null;
    }
     /**
     * 获取 Number 类型的value
     * @param jsonstr
     * @param key
     */
    public static String  getJsonNumber(String jsonstr,String key) {
        String regex = "\""+key+"\":([0-9.]+)";//使用非贪婪模式 匹配一个以上
        Matcher matcher = Pattern.compile(regex).matcher(jsonstr);
        while (matcher.find()) {
            //set.add(Integer.valueOf(matcher.group(1)));
            return matcher.group(1);

        }
        return null;
    }

也可以通过set或者map存储出现key的所有值,编码随自己定,欢迎讨论

上一篇下一篇

猜你喜欢

热点阅读