我想知道在 JAVA 中解析 json 的最快方法是什么?
- 使用 Array 中内置的库和 Object 对象获取默认对象图
- 使用您自己的 java bean 获取自定义对象图
谢谢
将解析的 JSON 映射到 Java bean 涉及额外的步骤,因此使用原始接口(例如 Jackson 的流式 API)会更快。这样,您还可以阅读直到拥有所需内容并停止解析。
作为对来自Jackson Wiki的@sikorski 的回应:
数据绑定是使用 Streaming API 作为底层 JSON 读/写系统构建的:因此它具有高性能 [...],但与纯流/增量处理相比有一些额外的开销
这几乎是不可避免的。如果你正在编写一个通用的 Jackson 解析器,你显然不能在其中使用自定义类型。因此,您必须在使用泛型解析器读取 JSON 后构造自定义类型,因此泛型解析器会更快。值得注意的是,这种开销非常小,几乎不需要优化。
好吧,最新和最快的一个是 Boon Json。我在我的项目中使用它并获得了 20 倍的改进。实际上,我很害怕并仔细检查了库是否在功能上正确。谢天谢地,它是 :) :) Boon 内置了从/到 Java Array/Maps 和自定义 Bean 的序列化和反序列化方法。
更多在这里: https ://github.com/RichardHightower/boon
您可以使用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);