问题标签 [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.
python - 使用 Python ijson 增量读取顶级 JSON 字典
我的 JSON 文件中有以下数据:
我想按如下方式打印顶级键和对象:
输出:
到目前为止,一切都很好。但是,如果我想为一个大文件做同样的事情,我将不得不在内存中读取它。这非常慢并且需要大量内存。
我想使用增量 JSON 解析器(ijson
在这种情况下)来实现我之前描述的:
上面的代码取自:No access to top level elements with ijson?
这也不合适,因为它还会读取内存中的整个文件。这并不是真正的增量。
如何在 Python 中对 JSON 文件的顶级键和相应对象进行增量解析?
python - 如何从 4GB 的 JSON 文件中提取数据?
我有一个 4GB 的 JSON 文件,其结构如下:
我只想遍历所有行,并为每一行提取 ID、名称和其他一些详细信息,并将其写入 CSV 文件。
如果我尝试以标准方式打开文件,它就会挂起。我一直在尝试使用IJSON,如下:
这适用于文件的简短提取,但在大文件上,它会永远挂起。
我也尝试过这种 IJSON 方法,它似乎适用于 4GB 的大文件:
但这似乎会依次打印每个叶节点,没有将每个顶级行作为单独项目的概念 - 对于具有任意数量叶节点的 JSON 数据,这会变得非常快速。要获取所有名称的数组,我需要执行以下操作:
有没有办法在这么大的文件中依次迭代每一行(而不是每一片叶子)?
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 文件会有帮助,这里是.
python - 使用 ijson 从 json 文件中提取值
我有一个大的 JSON 文件,如下所示:
现在,我使用ijson(交互式 Json)使用下面给出的代码从“详细信息”值中提取“1000”、“1001”等变量中存在的列表:
但问题是:for循环没有在上面的代码中终止。在 1001 打印最终列表后,它会继续运行。
我猜上面代码中的 Generator( objects ) 没有遇到StopIteration不知道为什么。
有人可以帮忙吗?一点帮助将不胜感激。
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 数据示例。如果不允许,我会删除它...
python - 从大型 json 文件中使用 python 加载元素
所以,这是我的 json 文件。我想从中加载数据列表,一个一个,只有它。然后,例如情节它...
这是一个例子,因为我正在处理大型数据集,我无法加载所有文件(这会产生内存错误)。
这是我尝试过的:
即使我尝试将其转换为列表,它也不会返回任何内容:
python - 大型(千兆字节)JSON 文件中间的解析错误
我正在使用 ijson ( https://pypi.python.org/pypi/ijson ) 来解析一个大的 JSON 文件。它有几个 GB,因此我无法将其全部存储在内存中。问题是在文件中间的某个地方,解析器遇到了错误(具体的异常是 UnicodeDecodeError)。我不需要每条数据,所以如果我跳过该条目也没关系,但我无法让它继续超过错误所在的位置。
我的代码看起来像这样:
如果我尝试在循环内捕获异常,它不会捕获它,因为它在解析中得到错误。如果我把它放在循环之外,我就不能在我离开的地方继续(据我所知)。我怎样才能绕过这个错误并继续前进?或者,如何以不需要打开文件或将其存储在内存中的方式修复文件?
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)
?
python - 将数组和嵌套数组中的 JSON 值写入单个 CSV
我有一个 JSON 输出,我想在其中创建一个包含两列的 csv 文件。第一列应包含 userId,第二列应包含 videoSeries 的值。输出如下所示:
我的 csv 应该是这样的:
我尝试使用 ijson 和 pandas 来获得所需的输出,但我无法将两个不同数组中的值获取到单个 csv 中
python - 在 Python 中使用 ijson 更新 JSON 值
我正在处理一个非常大的 JSON 文件,我决定使用 ijson 库。
现在我想更新这个 JSON 文件中的一些值,但我不知道怎么做。
例如,来自:
更新为:
通过使用 ijson 库。