我有以下请求代码:
>>> data
{'AmountInUSD': '40', 'CreditCardLastFourDigits': '1111'}
>>> r=requests.post('http://localhost:8000/api/v1.0/balance/deposit/', data=data)
以下是我试图解析json的方法,但我不断得到ValueError: No JSON object could be decoded
:
def deposit(request):
print '***', request.POST
print '>>>', request.raw_post_data
print '###', request.body
json.loads(request.raw_post_data)
它打印出来:
*** <QueryDict: {u'AmountInUSD': [u'40'], u'CreditCardLastFourDigits': [u'1111']}>
>>> AmountInUSD=40&CreditCardLastFourDigits=1111
### AmountInUSD=40&CreditCardLastFourDigits=1111
我应该怎么做呢?
答案 0 :(得分:2)
在您的代码中,传入的请求已经转换为 QueryDict
,它不是json字符串,这就是json.loads
无法对其执行任何操作的原因。< / p>
它是QueryDict
的原因是因为您将字典传递给requests.post
并且它正确地将其作为表单编码数据发布为请求正文的一部分。
作为一个QueryDict
对象,您可以像Python字典一样访问它:
request.POST.get('AmountInUSD')
request.POST.get('CreditCardLastFourDigits')
如果要将其转换回json,请尝试json.dumps(request.POST)
,或修改请求代码以在发送之前将字典转换为json字符串:
requests.post('http://localhost:8000/api/v1.0/balance/deposit/',
data=json.dumps(data))
答案 1 :(得分:1)
请求POST data
作为表单编码数据。那是你在deposit
得到的。如果您想发布JOSN,请在发布前编码data
。
r = requests.post(url, data=json.dumps(data))