简体   繁体   中英

Performance issue in Converting Java object to JSON object

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

Converting Java objects to JSON with Jackson

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

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");

And now I'm doing by using 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");

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

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

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

Please help me on this.

Thanks Sam B.

I have tried with jakson-afterburner:

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

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

timing was:

For 7:

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

For 7000:

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

For 70000:

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

For 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM