我有这个有效的Python代码。
from flask import Flask, jsonify
app = Flask(__name__)
tasks = [
{
'id': 1,
'title': 'Public',
'description': 'Available to download',
'done': False
},
{
'id': 2,
'title': 'Non-Public',
'description': 'Not available to download',
'done': False
},
{
'id': 3,
'title': 'Restricted-Public',
'description': 'got to',
'done': False
}
]
@app.route('/api/PDL/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = [task for task in tasks if task['id'] == task_id]
if len(task) == 0:
abort(404)
return jsonify({'task': task[0]})
if __name__ == '__main__':
app.run(debug=True)
我正在尝试替换以下内容以从外部data.json中读取:
tasks = [
{
'id': 1,
'title': 'Public',
'description': 'Available to download',
'done': False
},
{
'id': 2,
'title': 'Non-Public',
'description': 'Not available to download',
'done': False
},
{
'id': 3,
'title': 'Restricted-Public',
'description': 'got to',
'done': False
}
]
我尝试使用tasks = open("/myproject/test.json")
,但我收到以下Python错误。
TypeError: string indices must be integers
如何解决此问题?
答案 0 :(得分:1)
使用open
加载文件时,您将内容作为字符串读入tasts
。您需要转换为Python dictionary
对象才能像以前的代码一样使用它。
试试JSON。要在文件中设置要启动的正确字符串,请执行以下操作:
import json
tasks = [
{
'id': 1,
'title': 'Public',
'description': 'Available to download',
'done': False
},
{
'id': 2,
'title': 'Non-Public',
'description': 'Not available to download',
'done': False
},
{
'id': 3,
'title': 'Restricted-Public',
'description': 'got to',
'done': False
}
]
with open('/myproject/test.json', 'w') as f:
f.write(json.dumps(tasks))
然后,以Python dictionary
:
import json
with open('/myproject/test.json') as f:
tasks = json.loads(f.read())