2017-05-21 74 views
0

我想使用.format()生成一個JSON字符串。 我試過如下:JSON字符串和python3中的.format()

TODO_JSON = '{"id": {0},"title": {1},"completed:" {2}}' 
print(TODO_JSON.format(42, 'Some Task', False)) 

這引起了

File "path/to/file", line 2, in <module> 
    print(TODO_JSON.format(42, 'Some Task', False)) 
KeyError: '"id"' 

爲什麼發生這個錯誤?爲什麼'id'被解釋爲一個鍵而不是字符串的一部分?

+3

這對學習很好,但是我會使用'json'模塊進行實際工作,因爲它會爲你逃脫。 –

+0

@NickT我正在尋找一個很好的理由來使用json模塊,而不是一個簡單的字符串 - 你提供了一個很好的理由。 – Theo

回答

2

{}str.format特殊含義(佔位符和變量名),如果你需要的文字{}format,您可以使用{{}}

TODO_JSON = '{{"id": {0},"title": {1},"completed:" {2}}}' 
print(TODO_JSON.format(42, 'Some Task', False)) 
# {"id": 42,"title": Some Task,"completed:" False} 
+0

感謝您的回答。 – Theo

0

因爲它試圖解析到外{}是部分json格式化爲應該格式化的東西format

但是您應該嘗試json模塊

import json 
todo = {'id': 42, 'title': 'Some Task', 'completed': False} 
TODO_JSON = json.dumps(todo) 
+0

我的數據是作爲數據庫中的一個元組來傳入的,因此只需將它傳遞給字符串就非常簡單。創建一個字典並解析它有什麼好處? – Theo

1

您可以使用%格式樣式。

TODO_JSON = '{"id": %i,"title": %s,"completed:" %s}' 
print(TODO_JSON % (42, 'Some Task', False))