当前位置: 首页 > 知识库问答 >
问题:

Java对象到JSON对象转换中的性能问题

相威
2023-03-14

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

本文显示的是来自这个答案的不同API之间的性能统计。

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

        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);
    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");
    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");
taken time using jackson = 534 milli seconds
taken time using StringBuilder = 1 milli seconds
    null

请帮帮我。

共有1个答案

黎浩然
2023-03-14

谢谢Sam B。

我试过和雅克森-加力:

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

并且我测试了列表大小为7、7000、70000和700000:

taken time using jackson = 217 milli seconds
taken time using StringBuilder = 1 milli seconds
taken time using after-burner = 25 milli seconds
taken time using jackson = 310 milli seconds
taken time using StringBuilder = 31 milli seconds
taken time using after-burner = 65 milli seconds
taken time using jackson = 469 milli seconds
taken time using StringBuilder = 149 milli seconds
taken time using after-burner = 101 milli seconds
taken time using jackson = 1120 milli seconds
taken time using StringBuilder = 705 milli seconds
taken time using after-burner = 623 milli seconds
 类似资料:
  • 例如:Date值为:“dateCollected”:fri Jul 07 00:00:00 IST 1989, 但它只服用星期五而不是整个日期。

  • 我有这样一个json: 所以它是一个包含名称数组的对象。对此,什么是等效的Pojo? 但是我得到嵌套异常:

  • 我有字符串值 是否有任何可用的函数或有效的方法将这个JSON字符串转换成Java DateTime对象,而不是一个接一个地读取字段并构建我的对象? 谢谢

  • 我在groovy类中有一个Restendpoint,其方法签名如下...... 是一个。在我的post请求中,我传递json。 如果我这样做,我可以看到参数(注意:我知道这是在java样式循环中打印字符串。这不是我想要的)...... 我想要的是一种转换使用groovy读取一个漂亮的Json对象,然后从Json对象读取属性? 谢谢

  • 问题内容: 就性能而言,对象类型转换的代价是多少? 在可能的情况下,我应该尽量避免进行类型转换吗? 问题答案: 它足够便宜,因此属于过早优化类别。除非您已对应用程序进行了概要分析并确定这是一个问题,否则不要浪费时间甚至就此思考或提问,最重要的是:不要为了避免它而妥协您的设计。

  • 问题内容: 我将直接从问题开始,稍后再提供更多背景信息。 简单 :我有一个,它代表一个特定的对象。将其转换为该对象的最佳方法是什么? 我知道您可以使用泛型来遍历所有元素并设置字段,但是什么是嵌套对象呢? 背景 :我有一个使用JSON对象的JAX- RS服务。我的服务处理不同类型的对象,仅代表一个接口。因此,我不知道哪些对象来自外部以及哪个程序正在使用我的服务。 在运行时,我通过界面上的信息。JAX