在 Python 中读取 json 数据时 str 或 byte 混淆

str or byte confusion when reading json data in Python

提问人:jared 提问时间:11/9/2023 更新时间:11/9/2023 访问量:41

问:

我正在阅读一个带有 python 中 Facebook 聊天导出的文件,示例如下:

jsonMessages = []

with open("Facebook/message_1.json", 'rb') as file1:
    json1 = json.load(file1)
    jsonMessages.extend(json1['messages'])

jsonMessages[0]['content']

for msg in jsonMessages:
    print(msg)

我的第一次打印尝试,我只是在位置 0 打印消息的内容,按预期输出消息的内容。

但是当我迭代列表并尝试相同的操作时,我收到以下错误消息

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[170], line 10
  7 jsonMessages[0]['content']
  9 for msg in jsonMessages:
---> 10     print(msg)

File <frozen codecs>:378, in write(self, object)

File ~\AppData\Local\anaconda3\Lib\site-packages\ipykernel\iostream.py:622, in OutStream.write(self, string)
620 if not isinstance(string, str):
621     msg = f"write() argument must be str, not {type(string)}"
--> 622     raise TypeError(msg)
624 if self.echo is not None:
625     try:

TypeError: write() argument must be str, not <class 'bytes'>

最糟糕的是,如果我将消息视为字节并尝试使用它,我会得到错误,说这是一个字典!decode()

AttributeError: 'dict' object has no attribute 'decode'
蟒蛇 json python-3.x

评论

2赞 Malcolm 11/9/2023
用 'r' 而不是 'rb' 打开以获取 str 输入而不是字节。
0赞 juanpa.arrivillaga 11/9/2023
这似乎是 IPython 的一些问题。您提供的代码本身不会引发该错误。你能提供一个最小的可重复的例子吗?
3赞 juanpa.arrivillaga 11/9/2023
@Malcolm这不会有任何区别,这些字节被解码为一些pyhton数据结构,以文本或二进制模式处理文件json.load
0赞 juanpa.arrivillaga 11/9/2023
因此,如果您正常运行此代码,例如将其放在某个文件中,那么它不会给您此错误.pypython foo.py

答: 暂无答案