使用 json.dumps/load 序列化/取消序列化给出属性错误:'unicode'对象没有属性'read'



我试图从亚马逊FPS捕获支付结果信息,它有两种形式:

  • 使用GET和查询字符串参数将用户重定向到原始服务器
  • Amazon向原始服务器发送POST,并带有匹配的参数

我不能保证哪个请求将首先到达服务器,所以我通过使用json.dumps序列化request.GETrequest.POST将第一个请求存储在DB中,然后尝试稍后使用json.loads加载它以与其他请求进行比较:

初始请求:

type = request.META['REQUEST_METHOD']
sub_req = SubscriptionRequest()
params = getattr(request, type)
serialized_params = json.dumps(params)
if type == 'GET': sub_req.client_params = serialized_params
if type == 'POST': sub_req.server_params = serialized_params
sub_req.save()

后续请求:

stored_params = json.load(sub_req.server_params if type == "GET" else sub_req.client_params)
错误:

  File "/var/www/test.com/htdocs/apps/subscription/services.py", line 147, in subscription_request_check_or_store
    stored_params = json.load(sub_req.server_params if type == "GET" else sub_req.client_params)
  File "/usr/lib/python2.7/json/__init__.py", line 274, in load
    return loads(fp.read(),
AttributeError: 'unicode' object has no attribute 'read'

Json.load()读取文件。使用json.loads()解析字符串

最新更新