5

我想知道在 JAVA 中解析 json 的最快方法是什么?

  • 使用 Array 中内置的库和 Object 对象获取默认对象图
  • 使用您自己的 java bean 获取自定义对象图

谢谢

4

3 回答 3

5

将解析的 JSON 映射到 Java bean 涉及额外的步骤,因此使用原始接口(例如 Jackson 的流式 API)会更快。这样,您还可以阅读直到拥有所需内容并停止解析。


作为对来自Jackson Wiki的@sikorski 的回应:

数据绑定是使用 Streaming API 作为底层 JSON 读/写系统构建的:因此它具有高性能 [...],但与纯流/增量处理相比有一些额外的开销

这几乎是不可避免的。如果你正在编写一个通用的 Jackson 解析器,你显然不能在其中使用自定义类型。因此,您必须在使用泛型解析器读取 JSON 后构造自定义类型,因此泛型解析器会更快。值得注意的是,这种开销非常小,几乎不需要优化。

于 2013-04-26T07:19:05.100 回答
5

好吧,最新和最快的一个是 Boon Json。我在我的项目中使用它并获得了 20 倍的改进。实际上,我很害怕并仔细检查了库是否在功能上正确。谢天谢地,它是 :) :) Boon 内置了从/到 Java Array/Maps 和自定义 Bean 的序列化和反序列化方法。
更多在这里: https ://github.com/RichardHightower/boon

于 2014-07-09T16:05:03.207 回答
0

您可以使用json-simple,它是一个高性能库,而且非常易于使用:

  JSONParser parser=new JSONParser();

  System.out.println("=======decode=======");

  String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
  Object obj=parser.parse(s);
  JSONArray array=(JSONArray)obj;
  System.out.println("======the 2nd element of array======");
  System.out.println(array.get(1));
  System.out.println();

  JSONObject obj2=(JSONObject)array.get(1);
  System.out.println("======field \"1\"==========");
  System.out.println(obj2.get("1"));    


  s="{}";
  obj=parser.parse(s);
  System.out.println(obj);

  s="[5,]";
  obj=parser.parse(s);
  System.out.println(obj);

  s="[5,,2]";
  obj=parser.parse(s);
  System.out.println(obj);
于 2013-04-26T07:24:20.747 回答