如何从请求帖子中解析我的视图中的json

时间:2014-11-18 08:03:28

标签: python json django python-requests

我有以下请求代码:

>>> 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

我应该怎么做呢?

2 个答案:

答案 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))