JSON解析(700 KB文件)与杰克逊一起超过30秒

时间:2013-12-30 03:14:17

标签: java android json parsing jackson

我有一个Android应用程序,必须解析一个JSON文件。最初,我使用的是内置的JSON.org解析器,但单独运行JSONArray node1=new JSONArray(response);命令大约需要30秒。

我看到有人推荐杰克逊,所以我给了那个旋转,这可能会让问题变得更糟。

我的电话JsonNode rootNode = mapper.readTree(responseString);大约需要20秒。

此外,以下几行大约需要10秒钟:

ObjectMapper mapper = new ObjectMapper();
TypeReference<List<Dealership>> typeRef = new TypeReference<List<Dealership>>(){};
List<Dealership> dealerships = mapper.readValue(rootNode.traverse(), typeRef);

它真的需要这么长时间来解析吗?一旦我拥有了我的数组,我的代码就会快速运行,它正在达到这一点,这需要花费很多时间。

我可以做些什么来优化我的代码?我应该尝试除杰克逊之外的其他事情,还是应该以其他方式使用杰克逊?

1 个答案:

答案 0 :(得分:3)

您会注意到ObjectMapper#readTree(..)个州

  

将JSON内容反序列化为使用set表示的树的方法   JsonNode实例。

所以这解析了一次JSON。

您还会注意到ObjectMapper#readValue(..)也声明了

  

将JSON内容反序列化为非容器类型的方法(可以   然而,是一个数组类型:通常是bean,数组或包装类型   (比如java.lang.Boolean)。

所以你实际上是在解析你的JSON两次,这可能会让你失望。

您可以使用

直接解析一次
mapper.readValue(responseString, typeRef)