2016-12-05 84 views
0

我有一個python對象,我轉儲到json並寫入文件。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'中的第一項缺少關閉'}'。 – 2016-12-05 09:02:43

回答

1

JSON沒有任何元組的概念:只有數組映射到Python列表。

沒有從實用的角度差異,但如果你認爲你真的很需要的元組,你將不得不對他們自己進行轉換

1

嵌套Python對象可能比您允許以JSON格式存儲更復雜。 JSON格式只有在將其導入Python時纔有一個容器並將其解析爲列表。

這種格式轉換不保守,它們會破壞信息。您也將無法存儲datetime,它將被轉換爲字符串。

1

JSON不支持元組,因此json模塊將它們轉換爲數組,其中是由JSON支持的

1

JSON不知道「(」(它沒有在規定JSON的符號)

json.dump智能將其轉換爲一個列表

0

如果您希望轉儲和加載對象完全相同,則使用pickle模塊而不是json模塊。