将Java对象转换为JSON对象时的性能问题 [英] Performance issue in Converting Java object to JSON object

查看:526
本文介绍了将Java对象转换为JSON对象时的性能问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在完成将Java对象转换为JSON的确切任务之前,我已在下面的示例中进行了测试。

I have tested below example before I do my exact task of converting Java Objects to JSON.

使用Jackson将Java对象转换为JSON

我一直在寻找更好的性能(转换时间应该非常少)。

And I was looking for the better performance (Converting time should be very less).

这篇文章是显示此答案中不同API之间的效果统计信息。

This article is showing the stats for the performance in between different APIs from this answer.

我的发现是例如我提到的第一个链接(记录很少):

My finding was for example with the first link that I mentioned (with few records):

        ValueData object = new ValueData();
        List<ValueItems> information = new ArrayList<ValueItems>();

        ValueItems v1 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat1", 1, "data1");
        ValueItems v2 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat2", 2, "data2");
        ValueItems v3 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat3", 3, "data3");
        ValueItems v4 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat4", 4, "data4");
        ValueItems v5 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat5", 5, "data5");
        ValueItems v6 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat6", 6, "data6");
        ValueItems v7 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat7", 7, "data7");

        information.add(v1);
        information.add(v2);
        information.add(v3);
        information.add(v4);
        information.add(v5);
        information.add(v6);
        information.add(v7);

        object.setInformation(information);

我要转换这个对象使用杰克逊:

And I'm going to convert this object by using Jackson:

    long smili = Calendar.getInstance().getTimeInMillis();

    ObjectWriter ow = new      ObjectMapper().writer().withDefaultPrettyPrinter();
    String json = ow.writeValueAsString(object);
    long emili = Calendar.getInstance().getTimeInMillis();
    System.out.println("taken time using jackson = " + (emili - smili) + " milli seconds");

现在我正在使用 StringBuilder

    smili = Calendar.getInstance().getTimeInMillis();
    StringBuilder sb = new StringBuilder();
    sb.append("{\n\"information\" : [\n");

        for (ValueItems vi : object.getInformation()) {
            sb.append("{\n\"timestamp\" : \""+vi.getTimestamp()+"\",");
            sb.append("\"feature\" : \""+vi.getFeature()+"\",");
            sb.append("\"ean\" : "+vi.getEan()+",");
            sb.append("\"data\" : \""+vi.getData()+"\"\n},");               
        }

        sb.deleteCharAt(sb.length() - 1);
        sb.append("]\n}");
     emili = Calendar.getInstance().getTimeInMillis();
     System.out.println("taken time using StringBuilder = " + (emili - smili) + " milli seconds");

我得到的时间如下,只是列表大小 7:

I got the timing as given below just for the list size 7:

taken time using jackson = 534 milli seconds
taken time using StringBuilder = 1 milli seconds

我想用信息列表转换对象大小超过10k,但时间应该非常少。

I want to convert the object with the information list size more than 10k but the time should be very less.


  1. 在这种情况下,使用 StringBuilder 创建JSON购买会有所帮助吗?

  2. 是否有其他API提供我需要的设施?

  1. Creating JSON buy using StringBuilder will help in this case?
  2. Is there other API gives the facility that I require?

请帮帮我。

推荐答案

谢谢Sam B.

我尝试过jakson-afterburner:

I have tried with jakson-afterburner:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new AfterburnerModule());
ow = mapper.writer().withDefaultPrettyPrinter();
json = ow.writeValueAsString(object);

我已经测试了列表大小7,7000,70000和700000:

And I have tested with list sizes 7, 7000, 70000 and 700000:

时间是:

对于7:

taken time using jackson = 217 milli seconds
taken time using StringBuilder = 1 milli seconds
taken time using after-burner = 25 milli seconds

对于7000:

taken time using jackson = 310 milli seconds
taken time using StringBuilder = 31 milli seconds
taken time using after-burner = 65 milli seconds

对于70000:

taken time using jackson = 469 milli seconds
taken time using StringBuilder = 149 milli seconds
taken time using after-burner = 101 milli seconds

对于700000:

taken time using jackson = 1120 milli seconds
taken time using StringBuilder = 705 milli seconds
taken time using after-burner = 623 milli seconds

当列表大小增加时,加力燃烧室效率很高。

When the list size increases, afterburner is efficient.

这篇关于将Java对象转换为JSON对象时的性能问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆