1. ホーム
  2. python

[解決済み] JSONへのダンプは、二重引用符と引用符のエスケープを追加します。

2022-10-05 16:58:32

質問

Python ツールで Twitter のデータを取得し、JSON フォーマットでディスクに出力しています。ツイートのデータ文字列全体が二重引用符で囲まれているという、意図しないエスケープに気づきました。さらに、実際のJSONフォーマットのすべての二重引用符はバックスラッシュでエスケープされています。

このようになります。

"{} {} created_at":\"Fri Aug 08 11:04:40 +0000 2014\",\"id\":497699913925292032,

どうすれば回避できますか?そのはずです。

{"created_at":"Fri Aug 08 11:04:40 +0000 2014" ............................................。

私のファイルアウトコードはこんな感じです。

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ファイルを読み込む際に問題が発生します。

どのように解決するのですか?

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')