问题标签 [ijson]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3342 浏览

python - 使用 Python ijson 增量读取顶级 JSON 字典

我的 JSON 文件中有以下数据:

我想按如下方式打印顶级键和对象:

输出:

到目前为止,一切都很好。但是,如果我想为一个大文件做同样的事情,我将不得不在内存中读取它。这非常慢并且需要大量内存。

我想使用增量 JSON 解析器(ijson在这种情况下)来实现我之前描述的:

上面的代码取自:No access to top level elements with ijson?

这也不合适,因为它还会读取内存中的整个文件。这并不是真正的增量。

如何在 Python 中对 JSON 文件的顶级键和相应对象进行增量解析?

0 投票
0 回答
300 浏览

python - 如何从 4GB 的 JSON 文件中提取数据?

我有一个 4GB 的 JSON 文件,其结构如下:

我只想遍历所有行,并为每一行提取 ID、名称和其他一些详细信息,并将其写入 CSV 文件。

如果我尝试以标准方式打开文件,它就会挂起。我一直在尝试使用IJSON,如下:

这适用于文件的简短提取,但在大文件上,它会永远挂起。

我也尝试过这种 IJSON 方法,它似乎适用于 4GB 的大文件:

但这似乎会依次打印每个叶节点,没有将每个顶级行作为单独项目的概念 - 对于具有任意数量叶节点的 JSON 数据,这会变得非常快速。要获取所有名称的数组,我需要执行以下操作:

有没有办法在这么大的文件中依次迭代每一行(而不是每一片叶子)?

0 投票
1 回答
1028 浏览

python - 将大量数据导入 Firebase 数据库的正确方法是什么?

我正在处理一个政治竞选捐款数据集,该数据集最终成为一个大约 500mb 的 JSON 文件(最初是一个 124mb 的 CSV)。它太大了,无法在 Firebase 网络界面中导入(在 Google Chrome 上的标签崩溃之前尝试)。我尝试手动上传对象,因为它们是由 CSV 制作的(使用 CSVtoJSON 转换器,每一行都变成一个 JSON 对象,然后我会在它们到来时将该对象上传到 Firebase)。

这是我使用的代码。

但是,这遇到了内存问题,无法完成数据集。尝试分块进行也是不可行的,因为 Firebase 没有显示所有上传的数据,而且我不确定我从哪里停下来。(在 Chrome 中打开 Firebase 数据库时,我会看到数据进入,但最终选项卡会崩溃,并且在重新加载后很多数据都丢失了。)

然后我尝试使用Firebase Streaming Import,但是会引发此错误:

查找最后一行(来自 ijson 的错误),我找到了这个 SO thread,但我只是不确定我应该如何使用它来让 Firebase Streaming Import 工作。

我使用 Vim 从尝试上传的 JSON 文件中删除了字节顺序标记,现在在运行导入器大约一分钟后出现此错误:

Firebase Streaming Importer 应该能够处理超过 250mb 的文件,而且我相当确定我有足够多的 RAM 来处理这个文件。关于为什么会出现此错误的任何想法?

如果看到我尝试使用 Firebase Streaming Import 上传的实际 JSON 文件会有帮助,这里是.

0 投票
1 回答
1239 浏览

python - 使用 ijson 从 json 文件中提取值

我有一个大的 JSON 文件,如下所示:

现在,我使用ijson(交互式 Json)使用下面给出的代码从“详细信息”值中提取“1000”、“1001”等变量中存在的列表:

但问题是:for循环没有在上面的代码中终止。在 1001 打印最终列表后,它会继续运行。

我猜上面代码中的 Generator( objects ) 没有遇到StopIteration不知道为什么。

有人可以帮忙吗?一点帮助将不胜感激。

0 投票
2 回答
2884 浏览

json - 将大型 Twitter JSON 数据 (7GB+) 加载到 Python 中

我已经通过 AWS 建立了一个公共流来收集推文,现在想做一些初步分析。我的所有数据都存储在 S3 存储桶中(在 5mb 文件中)。

我下载了所有内容并将所有文件合并为一个。根据 Twitter 规范,每条推文都存储为标准 JSON 对象。

基本上,合并文件包含多个 JSON 对象。我添加了左方括号和右方括号 ( [] ) 以使它看起来像一个字典列表,以便在将其读入 Python 时使用。所以结构有点像这样(我不确定我是否可以在这里发布推特数据):

删除第一条推文后,我将所有内容放入 www.jsonlint.com 并确认它是有效的 JSON 数据结构。

现在,我正在尝试将这些数据加载到 Python 中,并希望对推文中的不同术语进行一些基本计数(例如,@HillaryClinton 在推文文本中提到了多少次等)。

以前使用较小的数据集,我能够摆脱这样的代码:

然后,我将各个字段的数据写入 CSV 文件,并以这种方式进行分析。这适用于 2GB 文件。

现在我有一个 7GB 的文件,我注意到如果我使用这种方法,Python 会在“json.load(data.json)”行中抛出一个错误,说“OSError: [Errno 22] Invalid Argument.

我不确定为什么会发生这种情况,但我预计这可能是因为它试图一次将整个文件加载到内存中。这个对吗?

所以我试图使用 ijson ,它显然可以让你解析 json 文件。我尝试编写以下代码:

使用这个实现,我在“for item in content”这一行得到一个错误,说“ijson.backends.python.unexpectedsymbol:unexpected symbol '/u201c' at 1

我还尝试浏览数据文件的每一行,并将其作为 JSON 行格式浏览。因此,假设每一行都是一个 JSON 对象,我写道:

但是在这里,列表中的每个条目都是一个字符串而不是字典,这使得我很难从中解析出我需要的数据。有没有办法修改最后一个代码以使其按我的需要工作?但即便如此,考虑到内存限制,将整个数据集加载到列表中是否仍会使未来的分析变得困难?

我对继续进行此操作的最佳方法有些困惑。我真的很想在 Python 中做到这一点,因为我正在尝试学习如何使用 Python 工具进行此类分析。

有没有人有这方面的经验?我真的很愚蠢还是误解了一些非常基本的东西?

编辑:

所以,我首先去了 www.jsonlint.com 并粘贴了我的整个数据集,发现在删除第一条推文后,它是有效的 JSON 格式。所以现在我只是排除了那个文件。

我基本上有一个上述格式的数据集 ([{json1}, {json2}] 其中 {} 中的每个实体都代表一条推文。

现在我确认它是一个有效的 JSON,我的目标是将它放入 python 中,每个 JSON 都表示为一个字典(这样我就可以轻松地操作这些文件)。如果效率低下,有人可以在这里纠正我的思维过程吗?

为此,我做了:

问题是,我说 current_tweet.get 的最后一行不起作用,因为它一直说“str”没有属性“get”,所以我不确定为什么 json.loads() 没有给我字典。 ..

编辑#2

一位用户建议我删除 [ 和 ] 以及结尾的逗号,以便每一行都有有效的 JSON。这样我就可以 json.loads() 每行。我按照建议删除了括号。对于逗号,我这样做了:

这给出了一个错误提示 ValueError: Expecting ':' Delimiter: Line 1 Column 2305 (char 2304)

为了调试它,我打印了第一行(即我刚才说 print(no_comma)),我注意到 Python 打印的内容实际上有多个推文......当我在“UltraEdit”之类的编辑器中打开它时,我注意到每条推文是一条不同的行,所以我假设每个 JSON 对象都由换行符分隔。但是在这里,当我在逐行迭代后打印结果时,我看到它同时拉入了多条推文。

我应该以不同的方式迭代吗?我删除逗号的方法是否合适,还是应该单独预处理文件?

我很确定我的 JSON 格式很差,但我不确定为什么以及如何修复它。这是我的 JSON 数据示例。如果不允许,我会删除它...

https://ufile.io/47b1

0 投票
3 回答
3669 浏览

python - 从大型 json 文件中使用 python 加载元素

所以,这是我的 json 文件。我想从中加载数据列表,一个一个,只有它。然后,例如情节它...

这是一个例子,因为我正在处理大型数据集,我无法加载所有文件(这会产生内存错误)。

这是我尝试过的:

即使我尝试将其转换为列表,它也不会返回任何内容:

0 投票
0 回答
245 浏览

python - 大型(千兆字节)JSON 文件中间的解析错误

我正在使用 ijson ( https://pypi.python.org/pypi/ijson ) 来解析一个大的 JSON 文件。它有几个 GB,因此我无法将其全部存储在内存中。问题是在文件中间的某个地方,解析器遇到了错误(具体的异常是 UnicodeDecodeError)。我不需要每条数据,所以如果我跳过该条目也没关系,但我无法让它继续超过错误所在的位置。

我的代码看起来像这样:

如果我尝试在循环内捕获异常,它不会捕获它,因为它在解析中得到错误。如果我把它放在循环之外,我就不能在我离开的地方继续(据我所知)。我怎样才能绕过这个错误并继续前进?或者,如何以不需要打开文件或将其存储在内存中的方式修复文件?

0 投票
1 回答
2664 浏览

python - Python:ijson.parse(in_file) 与 json.load(in_file)

我正在尝试在 python 中读取一个大的 JSON 文件(~ 2GB)。

以下代码适用于小文件,但不适用于大文件,因为第二行出现 MemoryError。

我看了类似的帖子,几乎每个人都建议使用 ijson,所以我决定试一试。

这处理了读取大文件大小,但 ijson.parse 没有像 json.load 那样返回 JSON 对象,所以我的其余代码不起作用

TypeError:元组索引必须是整数或切片,而不是 str

如果我在使用 json.load 时打印出“posts”,则 o/p 看起来像一个普通的 JSON

如果我在使用 ijson.parse 后打印出“posts”,则 o/p 看起来像一个哈希映射

我的问题: 我不想更改我的其余代码,所以我想知道是否有办法将 o/p 转换ijson.parse(in_file)回 JSON 对象,以便它与我们使用的完全相同json.load(in_file)

0 投票
1 回答
406 浏览

python - 将数组和嵌套数组中的 JSON 值写入单个 CSV

我有一个 JSON 输出,我想在其中创建一个包含两列的 csv 文件。第一列应包含 userId,第二列应包含 videoSeries 的值。输出如下所示:

我的 csv 应该是这样的:

我尝试使用 ijson 和 pandas 来获得所需的输出,但我无法将两个不同数组中的值获取到单个 csv 中

0 投票
1 回答
420 浏览

python - 在 Python 中使用 ijson 更新 JSON 值

我正在处理一个非常大的 JSON 文件,我决定使用 ijson 库。

现在我想更新这个 JSON 文件中的一些值,但我不知道怎么做。

例如,来自:

更新为:

通过使用 ijson 库。