我有一个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);
它真的需要这么长时间来解析吗?一旦我拥有了我的数组,我的代码就会快速运行,它正在达到这一点,这需要花费很多时间。
我可以做些什么来优化我的代码?我应该尝试除杰克逊之外的其他事情,还是应该以其他方式使用杰克逊?
答案 0 :(得分:3)
您会注意到ObjectMapper#readTree(..)
个州
将JSON内容反序列化为使用set表示的树的方法 JsonNode实例。
所以这解析了一次JSON。
您还会注意到ObjectMapper#readValue(..)
也声明了
将JSON内容反序列化为非容器类型的方法(可以 然而,是一个数组类型:通常是bean,数组或包装类型 (比如java.lang.Boolean)。
所以你实际上是在解析你的JSON两次,这可能会让你失望。
您可以使用
直接解析一次mapper.readValue(responseString, typeRef)