python - 使用 Python 的 Flask 和 jsonpickle 在 JSON 中获取不需要的转义字符
问题描述
from flask import Flask, request, abort
from flask_restful import Api, Resource
import jsonpickle
app = Flask(__name__)
api = Api(app)
user_dict = {}
user_id = 0
class User(Resource):
@staticmethod
def get(path_user_id):
if path_user_id not in user_dict:
abort(400)
test = jsonpickle.encode(user_dict.get(path_user_id), unpicklable=False)
return jsonpickle.encode(user_dict.get(path_user_id), unpicklable=False)
@staticmethod
def put(path_user_id):
if path_user_id not in user_dict:
abort(400)
update_and_add_user_helper(path_user_id, request.get_json())
@staticmethod
def delete(path_user_id):
if path_user_id not in user_dict:
abort(400)
user_dict.pop(path_user_id, None)
class UserList(Resource):
@staticmethod
def get():
return jsonpickle.encode(user_dict, unpicklable=False)
@staticmethod
def post():
global user_id
user_id = user_id + 1
update_and_add_user_helper(user_id, request.get_json())
def update_and_add_user_helper(u_id, request_payload):
name = request_payload["name"]
age = request_payload["age"]
address = request_payload["address"]
city = request_payload["city"]
state = request_payload["state"]
zip_code = request_payload["zip"]
user_dict[u_id] = Person(name, age, address, city, state, zip_code)
class Person:
def __init__(self, name, age, address, city, state, zip_code):
self.name = name
self.age = age
self.address = address
self.city = city
self.state = state
self.zip_code = zip_code
api.add_resource(User, "/users/<int:path_user_id>")
api.add_resource(UserList, "/users")
if __name__ == "__main__":
app.run(debug=True)
调试get方法(通过用户ID)后,我得到了这个
test = '{"address": "123 Chestnut Ln", "age": 35, "city": "Denton", "name": "James Smith", "state": "Texas", "zip_code": "76210"}'
但是,正在显示的响应是:"{\"1\": {\"address\": \"123 Chestnut Ln\", \"age\": 35, \"city\": \"Denton\", \"name\": \"James Smith\", \"state\": \"Texas\", \"zip_code\": \"76210\"}}"
Flask 是否在返回时序列化对象?
另外,请假设已完成 POST 请求并且字典中有值。
解决方案
我试图搜索烧瓶文档,但没有成功,所以我试图摆弄你的代码,所以这就是我发现的:
当我改变时:
return jsonpickle.encode(user_dict.get(path_user_id), unpicklable=False)
至
return user_dict.get(path_user_id)
我有TypeError: Object of type 'Person' is not JSON serializable
例外。毕竟,flask 似乎会序列化响应。
推荐阅读
- median - 计算 1 万亿的中位数(或近似中位数)翻倍
- php - 清除 error_log 或 php_error
- java - 将 Spring Security 与外部 IDP 一起使用
- java - 如何从 textPane 中获取文本并使用它来进行数学运算?(爪哇)
- excel - 为什么我无法使用 microsoft excel 连接到网页?
- windows-subsystem-for-linux - WSL2 和 gnupg 中的权限问题
- python-3.x - 面对 Buildozer 错误说明命令失败
- bash - 关联数组初始化和访问期间的未绑定变量
- javascript - 尝试通过 Expo(React Native)启动应用程序时从 NodeJS 获取 EISDIR 错误
- boolean-expression - 有人可以用 C 语言向我解释这个问题吗