0

我目前正在尝试解析包含许多 Facebook 聊天片段的文本文件。片段存储如下:-

{"t":"msg","c":"p_100002239013747","s":14,"ms":[{"msg":{"text":"2what is the best restauran
t in hong kong? ","time":1303115825598,"clientTime":1303115824391,"msgID":"1862585188"},"from":10000
2239013747,"to":635527479,"from_name":"David Robinson","from_first_name":"David","from_gender":1,"to_name":"Jason Yeung","to_first_name":"Jason","to_gender":2,"type":"msg"}]}

我尝试了多种方法来解析/打开 JSON 文件,但无济于事。这是我迄今为止尝试过的: -

import json

data = []
with open("C:\\Users\\Me\\Desktop\\facebookchat.txt", 'r') as json_string:
    for line in json_string:
        data.append(json.loads(line)) 

错误:

Traceback (most recent call last):
  File "C:/Users/Amy/Desktop/facebookparser.py", line 6, in <module>
    data.append(json.loads(line))
  File "C:\Program Files\Python27\lib\json\__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\Python27\lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\Python27\lib\json\decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 1 column 91 (char 91)

并且:

import json

with open("C:\\Users\\Me\\Desktop\\facebookchat.txt", 'r') as json_file:
    data = json.load(json_file)

...但我得到与上面完全相同的错误。

有什么建议么?我在这里搜索了以前的帖子并尝试了替代解决方案,但无济于事。我知道我需要将其视为字典文件,例如,“时间”是一个键,“1303115825598”是相应的时间值,但如果我什至无法将 json 文件处理到内存中,我就没有办法可以解析它。

我哪里错了?谢谢

4

1 回答 1

3

您的数据包含 JSON 不允许的换行符。您必须再次将线条缝合在一起:

data = []
with open("C:\\Users\\Me\\Desktop\\facebookchat.txt", 'r') as json_string:
    partial = ''
    for line in json_string:
        partial += line.rstrip('\n')
        try:
            data.append(json.loads(partial))
            partial = ''
        except ValueError:
            continue  # Not yet a complete JSON value

该代码将行收集到partial中,但减去换行符,并尝试解码 JSON。如果成功,partial则再次设置为空字符串以处理下一个条目。如果失败,我们循环到下一行追加,直到有一个完整的 JSON 值要解码。

于 2012-11-12T21:29:20.503 回答