【问题标题】:How to parse json in my view from a requests post如何从请求帖子中解析我认为的 json
【发布时间】:2014-11-18 08:03:27
【问题描述】:

我有以下请求代码:

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

我应该怎么做呢?

【问题讨论】:

  • 数据是字典吗?
  • @VincentBeltman 请查看更新后的问题。

标签: python json django python-requests


【解决方案1】:

在你的代码中,传入的请求已经被转换为一个QueryDict,它不是一个json字符串,这就是为什么json.loads不能用它做任何事情。

之所以是QueryDict,是因为您将字典传递给requests.post,并且它正确地将其作为请求正文的一部分作为表单编码数据发布。

作为QueryDict 对象,您可以像访问Python 字典一样访问它:

request.POST.get('AmountInUSD')
request.POST.get('CreditCardLastFourDigits')

如果要转回json,试试json.dumps(request.POST),或者修改requests代码,把字典转成json字符串再发送:

requests.post('http://localhost:8000/api/v1.0/balance/deposit/',
              data=json.dumps(data))

【讨论】:

  • 我需要根据用户的身体数据做一个HMAC
【解决方案2】:

请求 POST data 作为表单编码数据。这就是你在deposit 中得到的。如果要发布 JOSN,请在发布前编码 data

r = requests.post(url, data=json.dumps(data))

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2019-05-03
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多