【发布时间】:2023-03-21 06:39:01
【问题描述】:
我使用 json.dumps 而不是 flask.jsonify 从 Flask 返回 json 内容类型,因为我使用一些定制的 JSON 编码来处理 Pandas 数据帧数据类型
view.py
def post(self)
....
header = {'Content-Type': "application/json"}
json_data = self.serialize_json(df, metadata)
return make_response(json_data, 200, header)
def serialize_json(self, df, metadata)
serialized = json.dumps({'classification': df.to_dict(orient='split'),
'metadata': metadata}, cls=JSONEncoder)
return serialized
编码器.py
class JSONEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, np.integer):
return int(o)
if isinstance(o, np.floating):
return float(o)
if isinstance(o, np.ndarray):
return o.tolist()
客户端看到的响应头总是包含:
Content-Type:application/json
但是我遇到的问题是,根据输入到 serialize_json 方法中的数据帧,有时客户端响应数据包含数据的字符串表示形式,例如:
{ \"uid\" : \"1\", \"genus\": \"Felis\" }
而不是
{ "uid" : "1", "genus": "Felis" }
尝试在 Python 中进行调试,记录 json_data 输出总是看起来像
{ "uid" : "1", "genus": "Felis" }
即使对于客户端看到 JSON 的字符串表示的实例也是如此。
似乎有时我会对数据进行双重编码,但我不知道这可能发生在哪里。
有什么建议吗?
【问题讨论】:
-
您的代码的某些相关部分似乎丢失了,例如
serialize_json中的return。大部分输出也丢失了。 -
{ \"uid\" : \"1\", \"genus\": \"Felis\" }的返回类型是什么?是字符串吗? -
@ChihebNexus 是从 javascript 检查 json 'object' 类型是:type:[object String] 但在它工作的情况下 type:[object Object]