ファブリックを使用してリモートサーバー上のファイルからjsonを読み込んでいます:
_from StringIO import StringIO
output = StringIO()
get(file_name, output)
output = output.getvalue()
_
output
の値は次のようになります。
_'"{\\n \\"status\\": \\"failed\\", \\n \\"reason\\": \\"Record already exists.\\"\\n}"'
_
json.loads(output)
を使用してこの文字列を辞書に解析しようとすると、辞書ではなくユニコードオブジェクト_u'{\n "status": "failed", \n "reason": "Record already exists."\n}'
_が返されます。
新しいユニコードオブジェクトをjson.loads()に戻すだけで、かなり悪い修正を思いつきました。
json.loads(json.loads(output))
これに対する他の解決策はありますか?
乾杯
データはエスケープされます。
json.loads(output.decode('string-escape').strip('"'))
あなたに望ましい結果を与えるはずです:
Out[12]: {'reason': 'Record already exists.', 'status': 'failed'}
ここでの解決策は、ファイルが最初に二重にJSONエンコードされている理由を理解することですが、データがjson.loads
を2回通過することを考えると正しいアプローチです。