`

三种常用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);

    }
分享到:
评论

相关推荐

    最全的 json解析JAR包

    本篇将详细介绍JSON解析相关的知识点,并针对"最全的json解析JAR包"进行解析。 1. JSON基本结构: JSON基于JavaScript的一个子集,主要由对象(Object)和数组(Array)两种数据结构组成。对象是键值对的集合,用...

    json所需要的夹包,json解析用,json,json夹包和教程,解析json所需要的夹包

    对于Java开发者,常用的JSON解析库有Jackson、Gson、org.json等;对于Python用户,可能使用json标准库或第三方的如SimpleJSON;而对于JavaScript,JSON是内置支持的。 标题和描述中提到的"json所需要的夹包,json...

    ios下三种解析json的库 sbjson TouchJson JSONKit

    本篇文章将详细介绍三种在iOS开发中常用的JSON解析库:SBJSON、TouchJSON以及JSONKit。 1. **SBJSON** SBJSON是Stig Brautaset开发的一个开源库,它提供了一个简单的方法来解析和生成JSON数据。SBJSON不仅支持...

    android常用json传值解析工具类

    面对嵌套的JSON数据,可以使用`JSONObject`和`JSONArray`进行解析。例如,从JSON对象中获取特定字段的值: ```java public static String getJsonValue(JSONObject jsonObject, String key) { return jsonObject...

    四种JSON解析包

    本篇将详细介绍四种常用的JSON解析包,并通过一个Demo来展示它们的使用方法。 1. **Gson** Gson是Google提供的一个开源库,它能将Java对象转换为JSON字符串,也能将JSON字符串反序列化为Java对象。Gson的使用非常...

    json解析器

    JSON解析器则是用来将JSON格式的字符串转换为JavaScript对象,或者将JavaScript对象转换为JSON字符串的工具。 在给定的“json解析器”中,我们可以推测这是一段优化过的JavaScript代码,去除了空白和注释,适合在...

    IOS抓包工具和JSON解析工具

    Moya提供了一种声明式的方式来定义API接口,同时集成了JSON解析,使网络请求变得更加优雅和可测试。 总的来说,对于iOS开发者来说,掌握如何使用抓包工具如Charles和Wireshark,以及理解如何解析JSON数据(如使用...

    android json解析(包含服务器端,客户端)

    在Android应用开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它简洁、易于读写,并且被广泛应用于服务器与客户端之间的数据传输。本教程将深入讲解Android客户端和服务器端如何进行JSON解析...

    最好用的Json工具.exe

    7. 性能优化:对于大量数据,高效的JSON解析和序列化至关重要。例如,使用流式解析(Gson的`JsonReader`或Jackson的`JsonParser`)可以减少内存消耗。 8. JSON Schema:这是一种规范,用于定义JSON数据的结构和约束...

    windows下得json解析工具

    这里我们将重点介绍“JsonView”这款在Windows环境下常用的JSON解析工具。 JsonView是一款免费且易于使用的JSON查看器,它能够帮助开发者和普通用户快速浏览、解析和编辑JSON文件。以下是JsonView的一些关键特点和...

    若依框架前端form-generator升级为最新版本,添加json解析器,将json配置解析为页面

    总之,这次若依框架前端form-generator的升级和添加JSON解析器是一个涉及到多个技术层面的过程,包括但不限于JSON解析、前端组件升级、兼容性测试以及UI调整。这样的升级能够使开发团队利用更先进的工具,提高开发...

    安卓json解析

    Google提供的Gson库是Android开发中常用的JSON解析库。它可以将Java对象转换为JSON字符串,反之亦然。例如,如果你有一个名为`User`的类,你可以使用Gson来轻松地序列化和反序列化JSON: ```java User user = ...

    json的解析jar包

    Java在处理JSON时通常需要借助第三方库,jar包就是这样的一个工具,提供了解析和生成JSON的功能。 在Java中,常用的JSON库有Gson、Jackson、org.json和Fastjson等。这些库提供了API,使得开发者能够方便地将Java...

    3种json解析方法包括服务器端和客户端

    在这个主题中,我们将深入探讨三种在Android开发中常用的JSON解析方法:原生的`json`库,Google的`Gson`库以及Fastjson。这些方法适用于服务器端和客户端的开发,对于初学者来说是理解和实践JSON解析的重要步骤。 1...

    Android 实用的数据json数据解析封装类

    在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其轻量级、易读易写的特点,被广泛应用于服务器与客户端之间的数据传输。对于Android开发者来说,理解和熟练掌握JSON解析至关重要...

    Qt 常用Json库

    本文将详细讨论在Qt中常用的三种Json库:cppJson、QJson以及jsoncpp。 首先,我们来看`Qt下cppJson,适合嵌入式环境.zip`。cppJson是专为Qt环境设计的一个轻量级JSON解析库,特别适合资源有限的嵌入式系统。它提供...

    Json_Gson_FastJson解析

    下面我们将详细探讨这三种JSON解析库的使用方法。 1. **org.json**: org.json是一个开源的Java库,主要用于处理JSON数据。它的主要类包括JSONObject和JSONArray,它们分别代表JSON对象和数组。例如,你可以这样...

    C++解析json字符串

    C++作为一款强大的系统编程语言,虽然原生并不支持JSON解析,但有多种库可以用来处理JSON字符串。本主题将深入探讨如何在C++中解析JSON字符串,主要涉及以下几个知识点: 1. **JSON基本结构**:JSON数据由键值对...

Global site tag (gtag.js) - Google Analytics