Python 通过curl命令更新json文件
我正在尝试通过接受Python 通过curl命令更新json文件,python,json,curl,Python,Json,Curl,我正在尝试通过接受curl实用程序中的数据,在json文件中编写和更新应用程序。现在,我的代码如下所示: import os import flask import Flask, url_for, json, request, jsonify database = "./meeting_rooms.json" @app.route('/book_room', methods = ['POST']) def api_book_room(): if request.headers['Conten
curl
实用程序中的数据,在json
文件中编写和更新应用程序。现在,我的代码如下所示:
import os
import flask import Flask, url_for, json, request, jsonify
database = "./meeting_rooms.json"
@app.route('/book_room', methods = ['POST'])
def api_book_room():
if request.headers['Content-Type'] == 'application/json':
if os.stat(database).st_size == 0:
with open(database, 'w') as f:
data = request.get_json()
json.dump (data, f, indent=4)
return "OK\n", 200
else:
with open(database,'r+') as f:
data = json.load(f)
data.update(request.get_json())
json.dump(data, f, indent=4)
return "OK\n", 200
curl
用法:
curl -H "Content-type: application/json" -X POST http://127.0.0.1:5000/book_room -d '{"4":{"room":"602","date":"2 days ago","booked_by":"HR"}} '
但我得到的只是
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)**. json file is empty.
考虑到我没有实际的
python
经验,我做错了什么?一个在json解码时捕获错误的解决方案。它检查文件存在和文件打字错误
import os
from flask import Flask, url_for, json, request, jsonify
from path import Path
app = Flask(__name__)
database = "./meeting_rooms.json"
@app.route('/book_room', methods = ['POST'])
def api_book_room():
if request.headers['Content-Type'] == 'application/json':
try:
tmp = json.load(open(database, 'r'))
except (ValueError, FileNotFoundError):
# FileNotFoundError: raised if file don't exist
# ValueError: raised if json is not able to decode
tmp = {}
for k, v in request.get_json().items():
tmp[k] = v
with open(database,'w') as f:
json.dump(tmp, f, indent=4)
return "OK\n", 200
return "FAIL\n", 200
app.run(host='0.0.0.0', port=8080, debug=True)
编辑:更新键,而不是附加键。好的,但是来自curl的数据必须写入json文件,在我的情况下不会发生。如果JSONDecodeError出现在“data=json.load(F)”行中,则表明您的meeting_rooms.json没有内容是的,文件是空的,我添加了“If-else”条件来检查其大小。但是它没有帮助,我得到了相同的错误。使用
os.path.exists(数据库)
而不是os.stat(数据库).st_size
我想你的文件中有一个空行,所以st_size!=0
但是json解码看到一个空文件是否可以写入json文件,使其看起来像这样?{“1”:{“房间”:“valore”,“日期”:“valore”},“2”:{“房间”:“valore”,“日期”:“valore”},“3”:{“id”:“valore”,日期”:“valore”}再次感谢!如果您能为我指出允许生成此类代码的主题,我将不胜感激。