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 に答える