2016-12-05 12 views
0

私はjsonにダンプしてファイルに書き込むpythonオブジェクトを持っています。PythonオブジェクトとJSON

results = [ 
{'destination': (x,y), 'id': 'dsss', 'origin': (x,r), 'waypoints': [[s,l],[d,s]]}, 
{'destination': (x1, y1), 'id': 'ddsdsee', 'origin': (z,f), 'waypoints': [[e,y],[d,e]]}] 

with gzip.open("test.json.gz",'w') as outfile: 
    json.dump(results,outfile,indent=2) 

私はその後を経由して、別の場所でファイルを開きます。

schedule_f = gzip.open("test.json.gz") 
schedule = json.load(schedule_f) 

pprint(schedule[0])リターン:

{'destination': [x,y], 'id': 'dsss', 'origin': [x,r], 'waypoints': [[s,l],[d,s]] 

はなぜリストに変換origindestinationフィールドですか? (を明示しています。[

+0

あなたの入力は有効ではありませんPython、 'results'の最初の項目には'} 'がありません。 –

答えて

1

JSONにはtuplesというコンセプトはありません。これはPythonのリストにマップされる配列だけです。

あり、実用的な観点からの違いはありませんが、あなたが本当にあなたの考えるタプルが必要な場合、あなたは

1

ネストされたPythonオブジェクトは、JSON形式で保存することが許可されているよりも複雑になる可能性があります。 JSON形式は、コンテナと、それをPythonにインポートするときにリストとして解析されます。

このような形式変換は保守的ではなく、情報を破壊します。 datetimeも保存できません。文字列にキャストされます。

1

JSONはタプルをサポートしていないため、jsonモジュールはそれらを配列に変換します。は、JSONがサポートするです。

1

JSONは「(」(それが指定されていない知らない自分で変換する必要がありますJSON表記)

あなたjson.dumpインテリジェントはリストに変換

0

してください、JSONとは何かをお読みください。。https://en.wikipedia.org/wiki/JSON

JSON DOEタプルのデータ型をサポートしていません。リストのみをサポートしているので、PythonのタプルがJSONリストに変換されています。

0

ダンプオブジェクトとロードオブジェクトを正確に同じにしたい場合は、jsonモジュールの代わりにpickleモジュールを使用します。

関連する問題