Json 在对 Python 的 PUT 请求中 Flask 应用解码失败

Json in PUT request to Python Flask app fails to decode

我正在构建一个 SQLite3 数据库来存储任何给定天文图像中恒星的孔径通量测量值。我有一个文件 (star_database.py) 包含一个 Flask 应用程序 运行 两条处理从数据库中选择和插入数据库的路由。有一个单独的脚本 (aperture_photometry.py) 将在传入图像需要光度处理时调用这些路由。我的问题的症结在于将数据插入 SQLite 数据库的函数与负责将数据传递到 Flask 应用程序的孔径测光脚本之间的交互。以下是相关函数:

# Function in aperture_photometry.py that turns Star object data into a dictionary
# and passes it to the Flask app

from astropy.io import fits
import requests
import json

def measure_photometry(image, bandpass):
    df = fits.getdata(image)
    hf = fits.getheader(image, ext=1)
    date_obs = hf['DATE-OBS']
    ra, dec = get_center_coords(hf)
    response = requests.get(f'http://127.0.0.1:5000/select/{ra}/{dec}/').content
    star_json = json.loads(response)
    if star_json is not None:
        stars = json_to_stars(star_json)
        get_raw_flux(df, df*0.01, hf, stars) # Error array will be changed
        star_json = []

        # Critical section
        for star in stars:
            star_json.append({"star_id":star.star_id, "source_id":star.source_id, "flux":star.flux, "flux_err":star.flux_err})
        response = requests.put('http://127.0.0.1:5000/insert/', data={'stars':star_json, 'bandpass':bandpass, 'dateobs':date_obs})
        print(response.content)
    else:
        print("ERROR: Could not get star objects from database.")
# Function in star_database.py that handles incoming flux measurements from the 
# aperture photometry script, and then inserts data into the SQLite database

from flask import Flask, request

@app.route('/insert/', methods=['PUT'])
def insert_flux_rows():
    conn = create_connection(database)
    if conn is not None:
        c = conn.cursor()
        body = request.get_json(force=True)
        print(body)
        
        # More comes after this, but it is not relevant to the question

在 运行 Flask 应用程序和调用 aperture_photometry.py 之后,PUT 请求 response.content 行打印 400 Bad Request 错误消息 Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)。我认为这个问题要么出在我尝试格式化星形对象数据的方式,因为它被传递到 measure_photometry 中的 PUT 请求,或者如果没有,那么做 body = request.get_json(force=True) 有问题。还值得一提的是 insert_flux_rows 中的语句 print(body) 不会将任何内容打印到标准输出。出于所有意图和目的,这两个脚本必须保持独立,即我不能将它们组合起来并删除请求依赖性。

非常感谢您对此提供帮助,因为我一整天都在尝试修复它。

根据 this question 的最佳答案,您在 measure_photometry 函数中的 data 变量似乎无法正确转换为 json.

您应该尝试对其进行测试(也许 运行 一个 json.dumps 就可以了)以查看是否提供了更详细的错误消息。还有 jsonschema 包。