JSON にダンプすると二重引用符と引用符のエスケープが追加されます 質問する

JSON にダンプすると二重引用符と引用符のエスケープが追加されます 質問する

Python ツールを使用して Twitter データを取得し、JSON 形式でディスクにダンプしています。ツイートのデータ文字列全体が二重引用符で囲まれ、意図せずエスケープされていることに気付きました。さらに、実際の JSON 形式のすべての二重引用符は、バックスラッシュでエスケープされています。

次のようになります:

"{\"created_at\":\"2014年8月8日金曜日11:04:40 +0000\",\"id\":497699913925292032,

これを避けるにはどうしたらいいでしょうか? 次のようにすればいいでしょう:

{"created_at":"2014 年 8 月 8 日金曜日 11:04:40 +0000" .....

私のファイル出力コードは次のようになります:

with io.open('data'+self.timestamp+'.txt', 'a', encoding='utf-8') as f:
            f.write(unicode(json.dumps(data, ensure_ascii=False)))
            f.write(unicode('\n'))

意図しないエスケープにより、後の処理ステップで JSON ファイルを読み込むときに問題が発生します。

ベストアンサー1

JSON文字列を二重にエンコードしていますdataすでにJSON文字列であり、エンコードする必要はないまた:

>>> import json
>>> not_encoded = {"created_at":"Fri Aug 08 11:04:40 +0000 2014"}
>>> encoded_data = json.dumps(not_encoded)
>>> print encoded_data
{"created_at": "Fri Aug 08 11:04:40 +0000 2014"}
>>> double_encode = json.dumps(encoded_data)
>>> print double_encode
"{\"created_at\": \"Fri Aug 08 11:04:40 +0000 2014\"}"

これらをファイルに直接書き込むだけです:

with open('data{}.txt'.format(self.timestamp), 'a') as f:
    f.write(data + '\n')

おすすめ記事