【问题标题】:ValueError: No JSON object could be decoded - Django request.bodyValueError:无法解码 JSON 对象 - Django request.body
【发布时间】:2015-08-13 09:32:07
【问题描述】:

request.body 包含以下内容:

"event=project.status.update&project_id=807276&project_status_code=in_progress"

但是当我这样做时:

json.loads(request.body)

我得到:

ValueError: No JSON object could be decoded

我做错了什么?

【问题讨论】:

  • json.dumps 采用 python 字典/JSON 对象和 counter 函数,json.loads 采用 json 字符串。您不能对表单编码的字符串执行dumps/loads。无论是谁发出这个 http 请求,他们都可以做 JSON.stringify,制作一个有效的 json 字符串,将他们的 Content-type, 标头设置为 application/json 并发送它
  • @MadhavanKumar 抱歉,函数名称错误,我的意思是加载()
  • @doniyor 但它仍然不是有效的 JSON。您需要将其设为 JSON 格式才能将其作为 JSON 对象加载。
  • @SuperBiasedMan 怎么做?
  • 您为什么要尝试将其加载为 JSON?这是一个标准的 POST,您可以从 request.POST 获取查询字典。

标签: python json django


【解决方案1】:

request.body 包含表单编码的数据,而不是 json 编码的数据。这会自动解码为request.POST 中的 Python 字典。因此,您应该使用request.POST,而不是直接使用request.bodyjson.loads

【讨论】:

    【解决方案2】:

    json.dumps 采用 python 字典/JSON 对象和 counter 函数,json.loads 采用 json 字符串。

    您不能对表单编码的字符串进行转储/加载。

    无论是谁发出这个http请求,他们都可以做JSON.stringify,从表单数据对象中生成一个有效的json字符串,将他们的Content-type,标头设置为application/json并发送它

    【讨论】:

      【解决方案3】:

      您的 JSON 字符串必须与以下字符串类似才能使用json.loads()

      '{
          "event": "project.status.update", 
          "project_id": "807276", 
          "project_status_code": "in_progress"
      }'
      

      【讨论】:

      • 虽然这在技术上回答了这个问题,但它并不是一个让提问者解决问题的实用解决方案。手动将此字符串实例更改为字典不是下次可行的解决方案。
      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 2015-03-29
      • 2023-03-12
      • 2015-01-04
      • 1970-01-01
      • 2017-11-17
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多