当前位置: 首页 > 面试题库 >

快速高效的方式以Java逐行读取大型JSON文件

米浩穰
2023-03-14
问题内容

我的文件中有1亿条记录JSON,需要一种有效且最快的方法来从中的JSON文件读取数组数组java

JSON 文件看起来像:

[["XYZ",...,"ABC"],["XYZ",...,"ABC"],["XYZ",...,"ABC"],...,["XYZ",...,"ABC"],
 ["XYZ",...,"ABC"],["XYZ",...,"ABC"],["XYZ",...,"ABC"],...,["XYZ",...,"ABC"],
 ...
 ...
 ...
 ,["XYZ",...,"ABC"],["XYZ",...,"ABC"],["XYZ",...,"ABC"]]

我想JSON逐行读取此文件为:

首先阅读:

["XYZ",...,"ABC"]

然后:

["XYZ",...,"ABC"]

依此类推:’

...
...
...
["XYZ",...,"ABC"]

我如何读取这样的JSON文件,我知道它看起来并不完全像JSON文件,但是我需要以另存为JSON的这种格式读取该文件


问题答案:

您可以使用JSON Processing API(JSR
353)
来以流方式处理数据:

import javax.json.Json;
import javax.json.stream.JsonParser;

...

String dataPath = "data.json";

try(JsonParser parser = Json.createParser(new FileReader(dataPath))) {
     List<String> row = new ArrayList<>();

     while(parser.hasNext()) {
         JsonParser.Event event = parser.next();
         switch(event) {
             case START_ARRAY:
                 continue;
             case VALUE_STRING:
                 row.add(parser.getString());
                 break;
             case END_ARRAY:
                 if(!row.isEmpty()) {
                     //Do something with the current row of data 
                     System.out.println(row);

                     //Reset it (prepare for the new row) 
                     row.clear();
                 }
                 break;
             default:
                 throw new IllegalStateException("Unexpected JSON event: " + event);
         }
     }
}


 类似资料:
  • 问题内容: 我一直在寻找最快的方法来用有限的内存(大约64MB)在Java中再次读写大文件(0.5-1 GB),这是最快的方法。文件中的每一行代表一条记录,因此我需要逐行获取它们。该文件是普通文本文件。 我尝试了BufferedReader和BufferedWriter,但这似乎不是最好的选择。读写大小为0.5 GB的文件大约需要35秒钟,仅进行读写操作而不进行任何处理。我认为这里是写作的瓶颈,因

  • 代码将是特定于平台的windows OS 与事实,我正在写一个特定的当前CPU等'… *别介意它不是多平台的。 怎样才是更有效的方法? 编辑: 我想更新这个问题,因为我想解决效率问题:最有效的方法可以追溯到每行扫描文件的细节,是否是逐个字符的唯一方法,如何避免在每个字符上调用函数...任何可以最大限度地提高每行循环性能的东西,这意味着有效地获得一行的定义...

  • 我需要从全球网格中提取特定节点集的数据,这些节点由纬度/经度坐标给出(大约5000-10000)。这些数据是水力参数的时间序列,例如波高。 全球数据集是巨大的,所以它被分成许多NetCDF文件。每个NetCDF文件大约5GB,包含整个全球网格的数据,但只针对一个变量(例如波高)和一年(例如2020年)。假设我想在某个位置提取6个变量的完整时间序列(42年),我需要提取数据形式为6x42=252个N

  • 问题内容: 什么是我可以逐行读取每行包含两个String的最快方法?输入文件示例为: 即使在字符串之间有空格,例如,“按行”,每行上总是有两组字符串 目前我正在使用 使用标准的JAVA API是否足够有效或有更有效的方法(请没有外部库)感谢您的帮助! 问题答案: 这取决于您说“有效”时的意思。从性能的角度来看,这是可以的。如果您询问代码的样式和大小,我几乎会做一个小小的修正: 为了从STDIN中读

  • 本文向大家介绍C#逐行读取文件的方法,包括了C#逐行读取文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#逐行读取文件的方法。分享给大家供大家参考。具体如下: 这里使用C#逐行读取文件,对于大文件的读取非常有用。 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 我需要使用Java逐行读取大约5-6 GB的大型文本文件。 我如何快速做到这一点? 问题答案: 常见的模式是使用 如果你假设没有字符编码,则可以更快地读取数据。例如ASCII-7,但差别不大。你处理数据的时间很可能会花费更长的时间。 一种不太常用的模式,可以避免line泄漏的范围。 在Java 8中,你可以执行