`

三种常用JSON解析性能比较

阅读更多
今天用了三种三方包来解析JSON文件并试验了其性能:

JSON文件(测试用):
private static String json = "{\"id\":1,\"title\":\"德国黑森林罕见暴雨把路面冲走\",\n" +
            "    \"questions\":[\n" +
            "        {\"sequence\":1,\"title\":\"你是那个?\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":2,\"title\":\"德国黑森林罕见暴雨把路面冲走\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":3,\"title\":\"德国黑森林罕见暴雨把路面冲走\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":4,\"title\":\"你是那个\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":5,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":6,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":7,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":8,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":9,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":10,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":11,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":12,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":13,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":14,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":15,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":16,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":17,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":18,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":19,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]},\n" +
            "        {\"sequence\":20,\"title\":\"美海豚伤痕累累疑曾遭虎鲸整只吞食\",\"answers\":[{\"result\":\"A:姓名\"},{\"result\":\"B:六哈\"},{\"result\":\"C:积分\"},{\"result\":\"D:金佛额\"}]}\n" +
            "        ]\n" +
            "}" ;

1 - json-20070829.jar(不知道从网上那里来的),执行时间11s-12s
public void testParseJsonWith_org_json_jar() throws Exception {
        long start = System.currentTimeMillis();

        for (int loop = 0; loop < 10000; loop++) {

            ExaminationDTO examinationDTO = new ExaminationDTO();
            JSONObject jExamination = new JSONObject(json);

            //handle examination info
            int id = jExamination.optInt("id");
            String title = jExamination.optString("title");
            examinationDTO.setId(id);
            examinationDTO.setTitle(title);

            //hanle question
            JSONArray jQuestions = jExamination.getJSONArray("questions");
            for (int i = 0; i < jQuestions.length(); i++) {
                JSONObject jQuestion = jQuestions.getJSONObject(i);
                int sequence = jQuestion.optInt("sequence");
                String questionTitle = jQuestion.optString("title");
                QuestionDTO questionDTO = new QuestionDTO();
                questionDTO.setSequence(sequence);
                questionDTO.setTitle(questionTitle);

                //handle answer
                JSONArray jAnswers = jQuestion.getJSONArray("answers");
                for (int j = 0; j < jAnswers.length(); j++) {
                    JSONObject jAnswer = jAnswers.getJSONObject(j);
                    String result = jAnswer.optString("result");
                    String[] tokens = StringUtils.delimitedListToStringArray(result, ":");
                    AnswerDTO answerDTO = new AnswerDTO();
                    answerDTO.setSequence(tokens[0]);
                    answerDTO.setResult(tokens[1]);
                    questionDTO.addAnswer(answerDTO);
                }

                examinationDTO.addQuestion(questionDTO);
            }
        }

        long end = System.currentTimeMillis();
        long during = end - start;
        System.out.println("10000 times taken time for org.json is " + during);
    }

2 - alibaba fastjson-1.1.34.android.jar,执行时间8s-9s
public void testParseJsonWith_fast_json_jar() throws Exception {
        long start = System.currentTimeMillis();

        for (int loop = 0; loop < 10000; loop++) {

            ExaminationDTO examinationDTO = new ExaminationDTO();
            JSONObject jExamination = JSON.parseObject(json);

            //handle examination info
            int id = jExamination.getInteger("id");
            String title = jExamination.getString("title");
            examinationDTO.setId(id);
            examinationDTO.setTitle(title);

            //hanle question
            JSONArray jQuestions = jExamination.getJSONArray("questions");
            for (int i = 0; i < jQuestions.size(); i++) {
                JSONObject jQuestion = jQuestions.getJSONObject(i);
                int sequence = jQuestion.getInteger("sequence");
                String questionTitle = jQuestion.getString("title");
                QuestionDTO questionDTO = new QuestionDTO();
                questionDTO.setSequence(sequence);
                questionDTO.setTitle(questionTitle);

                //handle answer
                JSONArray jAnswers = jQuestion.getJSONArray("answers");
                for (int j = 0; j < jAnswers.size(); j++) {
                    JSONObject jAnswer = jAnswers.getJSONObject(j);
                    String result = jAnswer.getString("result");
                    String[] tokens = StringUtils.delimitedListToStringArray(result, ":");
                    AnswerDTO answerDTO = new AnswerDTO();
                    answerDTO.setSequence(tokens[0]);
                    answerDTO.setResult(tokens[1]);
                    questionDTO.addAnswer(answerDTO);
                }

                examinationDTO.addQuestion(questionDTO);
            }
        }

        long end = System.currentTimeMillis();
        long during = end - start;
        System.out.println("10000 times taken time for alibaba fast json is " + during);
    }

3 - jackson-all-1.9.11.jar, 执行时间15s-17s
public void testParseJsonWith_jackson_jar() throws Exception {
        long start = System.currentTimeMillis();

        for (int loop = 0; loop < 10000; loop++) {
            ObjectMapper objectMapper = new ObjectMapper();

            ExaminationDTO examinationDTO = new ExaminationDTO();
            JsonNode jExamination = objectMapper.readTree(json);

            //handle examination info
            int id = jExamination.get("id").getIntValue();
            String title = jExamination.get("title").getTextValue();
            examinationDTO.setId(id);
            examinationDTO.setTitle(title);

            //hanle question
            ArrayNode jQuestions = (ArrayNode) jExamination.get("questions");
            for (int i = 0; i < jQuestions.size(); i++) {
                JsonNode jQuestion = jQuestions.get(i);
                int sequence = jQuestion.get("sequence").getIntValue();
                String questionTitle = jQuestion.get("title").getTextValue();
                QuestionDTO questionDTO = new QuestionDTO();
                questionDTO.setSequence(sequence);
                questionDTO.setTitle(questionTitle);

                //handle answer
                ArrayNode jAnswers = (ArrayNode) jQuestion.get("answers");
                for (int j = 0; j < jAnswers.size(); j++) {
                    JsonNode jAnswer = jAnswers.get(j);
                    String result = jAnswer.get("result").getTextValue();
                    String[] tokens = StringUtils.delimitedListToStringArray(result, ":");
                    AnswerDTO answerDTO = new AnswerDTO();
                    answerDTO.setSequence(tokens[0]);
                    answerDTO.setResult(tokens[1]);
                    questionDTO.addAnswer(answerDTO);
                }

                examinationDTO.addQuestion(questionDTO);
            }
        }

        long end = System.currentTimeMillis();
        long during = end - start;
        System.out.println("10000 times taken time for jackson is " + during);

    }
分享到:
评论

相关推荐

    golang json性能分析详解

    json格式可以算我们日常最常用的序列化格式之一了,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好。下面这篇文章主要给大家详细分析介绍了golang json性能的相关资料,需要的朋友...

    每秒解析千兆字节的JSON-C/C++开发

    simdjson:每秒解析千兆字节的JSON JSON在Internet上无处不在。...快速:比其他生产级JSON解析器快2.5倍以上。 简易:一流,易于使用的API。 严格:完整的JSON和UTF-8验证,无损解析。 性能毫不妥协。 自动机

    CJsonObject-master.zip

    json 资源,可以灵活使用的一个开源库.... 常用且知名度较高的C&C++的JSON库有cJSON、json-c、JsonCpp等,腾讯员工开源的一个RapidJSON以高性能著称。C&C++的JSON库比较见RapidJSON作者的比较nativejson-benchmark。

    springboot整合Jackson实例项目-附工具类

    与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快;Jackson 运行时占用内存比较低,性能比较好;Jackson 有灵活的 API,可以很容易进行扩展和定制。 额外了解: Jackson 的 1.x ...

    web开发常用jar

    web开发常用jar包 常用jar包 commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,...

    python解析xml简单示例

    xml是除了json之外另外一个比较常用的用来做为数据交换的载体格式。对于一些比较固定的数据,直接保存在xml中,还可以免去去数据库中查询的麻烦。而且直接读小文件,性能比查询数据库应该更好,下面一个例子,如何用...

    爬取《es6标准入门》、自动推文到掘金、站点性能分析;高级爬虫、自动化UI测试、性能分析;.zip

    常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-...

    java开发常用jar包

    CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 log4j-1.2.15.jar 通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、...

    知乎-crawler是一个基于Java的高性能、支持免费http代理池、支持横向扩展、分布式爬虫项目.zip

    常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-...

    leizm-web:现代的Web中间件基础框架,完美支持TypeScript,建造可维护的大型Web项目

    内置TypeScript支持,强大的代码自动提示支持内置路由功能及众多常用的中间件,无需重复第三方模块性能主流主流框架代码库轻盈,依赖模块少内置中间件列表: bodyParser请求体解析: json解析application

    Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    常用的json解析框架的使用; - **Java进阶** 设计模式;多线程,虚拟机,性能优化技巧,反射,复杂算法(红黑树,贪心,动态规划等),网络通信; ## 功能模块 - 【Okhttp接口测试】在[com.gradle.http.uas](/tree/master...

    jmeter-plugins-manager-1.7.jar

    Jmeter 插件管理器---Jmeter-plugins-manager 常用的插件有: ...用于Json解析的-- JSON Path Extractor 用于展示响应时间曲线的-- Response Times Over Time 用于展示TPS曲线的-- Transactions per Second

    CorePlus 免费而强大的中文.net 类库 for .net 2 - 3.5

    HTML/JSON 解析 ZIP 压缩/解压 常用集合,弥补系统自身的集合的不足。 对于 C/S 结构,获取 CPU/IME 输入法/Memory 内存 等信息, 简化对 图标/键盘钩子/Win32 API 的操作 对于 B/S 结构,获取 访客/服务器 等信息,...

    CorePlus 免费而强大的中文.net 类库 for .net 3.5+

    HTML/JSON 解析 ZIP 压缩/解压 常用集合,弥补系统自身的集合的不足。 对于 C/S 结构,获取 CPU/IME 输入法/Memory 内存 等信息, 简化对 图标/键盘钩子/Win32 API 的操作 对于 B/S 结构,获取 访客/服务器 等...

    SparkSql技术

    三:sparkSQL组件之解析 17 3.1:LogicalPlan 18 3.2:SqlParser 20 3.1.1:解析过程 20 3.1.2:SqlParser 22 3.1.3:SqlLexical 25 3.1.4:query 26 3.3:Analyzer 26 3.4:Optimizer 28 3.5:SpankPlan 30 四:...

    典型相关分析matlab实现代码-AndroidResource:Android资源

    Json解析 常用工具 依赖注入 快速开发 动态加载 热修复 事件总线 性能工具 图表 响应式编程 日志框架 第二部分 博客社区 个人博客 团队博客 技术社区 技术周报 第三部分 技术书籍 计算机基础 本书是大学计算机相关...

    典型相关分析matlab实现代码-AndroidNote:AndroidNote

    Json解析 常用工具 依赖注入 快速开发 动态加载 热修复 事件总线 性能工具 图表 响应式编程 日志框架 第二部分 博客社区 个人博客 团队博客 技术社区 技术周报 第三部分 技术书籍 计算机基础 本书是大学计算机相关...

    典型相关分析matlab实现代码-Note:笔记

    Json解析 常用工具 依赖注入 快速开发 动态加载 热修复 事件总线 性能工具 图表 响应式编程 日志框架 第二部分 博客社区 个人博客 团队博客 技术社区 技术周报 第三部分 技术书籍 计算机基础 本书是大学计算机相关...

    java开源包1

    高性能的JSON处理 Jackson Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384...

Global site tag (gtag.js) - Google Analytics