1

所以我有一个非常大的 JSON 文件(600MB),我的 Java 项目中有几个模块可以导入 JSON 文件中的每个项目,并将其属性写入一个巨大数据库中的几个表中。它非常适用于到目前为止我必须处理的相对较小的 JSON 文件,但这个文件会使 JVM 抛出 OutOfMemoryException。我使用的库是 Jackson,我在以下函数的 Java 列表中加载 JSON 文件中的每个项目:

  public List<Products> listOfProducts(String JSONString)
  throws JsonParseException, JsonMappingException, IOException {
byte[] latin1 = JSONString.getBytes("ISO-8859-1");
String fromUtf8Bytes = new String(latin1);
ObjectMapper mapper = new ObjectMapper();
Products[] productsArray = mapper.readValue(fromUtf8Bytes,
    Products[].class);

List<Products> productsList= Arrays.asList(productsArray);

return productsList;

}

然后返回的列表被传递给我的导入函数,但在此之前发生内存不足异常。关于如何处理如此大的文件而不将原始 JSON 分解为几个较小的文件的任何想法?

4

2 回答 2

0

使用 Jackson 的流 API,您可以解析文件而无需将其完全存储在内存中。解析每个产品并将其放入您的数据库(或同时放入几个产品,可能会更好地减少数据库开销),但不要尝试一次加载所有产品。

于 2013-08-21T12:58:03.940 回答
0

有几种可能的解决方案,归结为增量处理或缓存(这取决于你想用productList的. 对于这种额外的内存开销,所需的额外 RAM 可能比开发人员的时间便宜。

于 2013-08-21T13:00:41.073 回答