在Java中反序列化JSON的最快方法是什么?

5

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

  • 使用内置的Array和Object对象构建默认对象图
  • 使用自己的Java bean构建自定义对象图

谢谢

3个回答

6

最新且速度最快的是Boon Json。我在我的项目中使用它,获得了20倍的改进。我实际上感到害怕并仔细检查了一下库是否功能正确。谢天谢地,没问题 :) :) Boon具有内置方法,可将Java数组/映射和自定义Bean序列化和反序列化。
更多信息请参见: https://github.com/RichardHightower/boon


5
将解析后的JSON映射到Java bean需要额外的步骤,因此使用原始接口(例如Jackson的流API)将更快。这样,您也可以读取直到获得所需内容并停止解析。
回应@sikorski
来自Jackson Wiki
数据绑定是使用流API作为基础JSON读/写系统构建的:因此它具有高性能[...],但与纯流/增量处理相比具有一些额外开销。
这几乎是不可避免的。如果您正在编写通用的Jackson解析器,则显然不能在其中使用自定义类型。因此,您将不得不在使用通用解析器读取JSON后构造自定义类型,因此通用解析器将更快。但值得注意的是,这种开销非常小,几乎永远不需要优化。

那么一些库提供了一种以SAX方式解析JSON的方法吗? - AdrienBrault
@AdrienBrault:没错,就像Jackson库。 - Enno Shioji
@Enno Shioji 请分享一些基准测试结果/统计数据或其他文章来支持你的回答。 - Sikorski

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

@AdrienBrault:我回答了第一部分解析JSON的问题,对我来说这意味着解码它,所以也许我误解了你的意思。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接