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”}再次感谢!如果您能为我指出允许生成此类代码的主题,我将不胜感激。