javascript - 无法在 Python 中解码来自 Javascript 的 JSON 响应

标签 javascript jquery python json django

我尝试使用 JQuery.post() 发送一条简单的消息,但在 Python 上出现此错误:

JSONDecodeError at cadastro/editPessoa/

Expecting value: line 1 column 1 (char 0)

Javascript(简化):

data = { "pessoa" : [ ["1","joão","321","camarão"] ] }
$.post('editPessoa/', data, function(response) {
    updatePessoas();
  }, 'json');

views.py:

@csrf_exempt    
def editPessoa(request):
    data = json.loads(request.body.decode('utf-8'))
    print(data)
    return HttpResponse('Done!')

尝试 json.loads() 时引发错误,如果我删除 .decode() 错误发生在 print() 上,则会引发无法打印字节

回溯:

JSONDecodeError at /cadastro/editPessoa/
Expecting value: line 1 column 1 (char 0)

Request Method: POST
Request URL: http://localhost:8000/cadastro/editPessoa/
Django Version: 1.10.3
Python Executable: C:\Users\6036794\Documents\django\djangocadastro\py35\Scripts\python.exe
Python Version: 3.5.2
Python Path: ['c:\\Users\\6036794\\Documents\\django\\djangocadastro', 'C:\\Python27', 'C:\\Users\\6036794
\\Documents\\django\\djangocadastro\\py35\\Scripts\\python35.zip', 'C:\\Python35\\DLLs', 'C:\\Python35
\\lib', 'C:\\Python35', 'C:\\Users\\6036794\\Documents\\django\\djangocadastro\\py35', 'C:\\Users\\6036794
\\Documents\\django\\djangocadastro\\py35\\lib\\site-packages']
Server time: Sex, 18 Nov 2016 15:33:35 -0200
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'cadastroapp']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Traceback:  

File "C:\Python35\lib\json\decoder.py" in raw_decode
  355.             obj, end = self.scan_once(s, idx)
  
    
      During handling of the above exception (0), another exception occurred:
    
  

File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\core\handlers\exception
.py" in inner
  39.             response = get_response(request)

File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\core\handlers\base
.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\core\handlers\base
.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\6036794\Documents\django\djangocadastro\py35\lib\site-packages\django\views\decorators
\csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "c:\Users\6036794\Documents\django\djangocadastro\cadastroapp\views.py" in editPessoa
  19.   data = json.loads(request.body.decode('utf-8'))

File "C:\Python35\lib\json\__init__.py" in loads
  319.         return _default_decoder.decode(s)

File "C:\Python35\lib\json\decoder.py" in decode
  339.         obj, end = self.raw_decode(s, idx=_w(s, 0).end())

File "C:\Python35\lib\json\decoder.py" in raw_decode
  357.             raise JSONDecodeError("Expecting value", s, err.value) from None

Exception Type: JSONDecodeError at /cadastro/editPessoa/
Exception Value: Expecting value: line 1 column 1 (char 0)
Request information:
USER: 6036794

GET: No GET data

POST:
pessoa[0][] = 'Camarão'

FILES: No FILES data

最佳答案

问题是数据需要首先被字符串化:

data = { "pessoa" : [ ["1","joão","321","camarão"] ] }
$.post('editPessoa/', JSON.stringify(data), function(response) {
    updatePessoas();
  }, 'json');

我假设它是由$.post()自动完成的

关于javascript - 无法在 Python 中解码来自 Javascript 的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683084/

相关文章:

php - 我被要求在没有用户名和密码的情况下执行身份验证,我有什么选择?

javascript - JSON解析失败

python - 以 numpy 数组为参数的 Cython 内联函数

python - 如何在 Odoo 中使用游标?

python - 在 Apache/mod_wsgi 上运行 Django 时出错

javascript - 如何使用 mediaelementjs.com 隐藏播放器中的控件

javascript - 调用消费方法后分配的回调如何执行

javascript - 计算时差

javascript - 我的 jQuery 插件出现 IE 脚本错误

javascript - 当有人开始在网页上输入内容时显示搜索字段