编辑:我已经看到了 SA 上关于此问题的所有问题,它们都给了我我在这里询问的错误 - 请您将其保持打开状态以便我可以获得一些帮助吗?
我有一个可以使用 Bash 非常简单地读取的文件,如下所示:
gzip -d -c my_file.json.gz | jq .
这确认它是有效的 JSON。但是当我尝试使用 Python 来读取它时,如下所示:
import json
import gzip
with gzip.open('my_file.json.gz') as f:
data = f.read() # returns a byte string `b'`
json.loads(data)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 1632)
Run Code Online (Sandbox Code Playgroud)
但我知道它是来自我的 Bash 命令的有效 JSON。我已经被这个看似简单的问题困扰了很长一段时间,并尝试了一切感觉。有人可以帮忙吗?谢谢。
就像文档告诉您的那样,gzip.open()
默认返回一个二进制文件句柄。传入一种rt
模式以将数据读取为文本:
with gzip.open("my_file.json.gz", mode="rt") as f:
data = f.read()
Run Code Online (Sandbox Code Playgroud)
...或单独的.decode()
二进制数据(显然你必须知道或猜测它的编码)。
如果您的输入文件在不同的行(称为“JSON行”或“JSONS”)上包含多个JSON记录,其中每个记录都是有效的JSON结构,则jq
可以在没有任何额外选项的情况下处理该记录,但Python的json
模块需要您在更多细节,也许是这样的:
with gzip.open("my_file.json.gz", mode="rt") as f:
data = [json.loads(line) for line in f]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7929 次 |
最近记录: |