JQuery: пост с JSON будет фактически отправлять массив - PullRequest
1 голос
/ 12 ноября 2010

У меня есть Python в качестве CGI, и POST из jquery преобразует объект json в массив, поэтому, когда я вижу POST из jquery, я на самом деле вижу:

login_user[username]=dfdsfdsf&login_user[password]=dsfsdf

([и] уже экранированы)

Мой вопрос, как я могу преобразовать эту строку обратно в JSON в Python?Или, как я могу преобразовать эту строку в структуру массива / dict python, чтобы мне было проще ее обрабатывать?

[править] Мой jquery публикует:

{'login_user': {'username':username, 'password':password}}

Ответы [ 3 ]

5 голосов
/ 12 ноября 2010

Если вы хотите отправить структурированные данные из браузера, а затем распаковать их в свой бэкэнд Python и сохранить ту же структуру, я предлагаю следующее:

  1. Создать JavaScriptобъекты в браузере для хранения ваших данных:

    var d = {} 
    d['login_user'] = { 'username': 'foo', 'password': 'bar' }
    
  2. Сериализация в JSON с https://github.com/douglascrockford/JSON-js
  3. POST для вашего бэкэнда, выполняющего что-то вроде этого:

    $. Post (url, {'data': encoded_json_data}, ...)

  4. В вашем коде Python, проанализируйте JSON, POST в моем примере, где вы получитеваши данные POST в вашем CGI-скрипте:

    data = json.loads(POST['data'])
    data['login_user']
    
1 голос
/ 12 ноября 2010
>>> import json
>>> data = {'login_user':{'username':'dfdsfdsf', 'password':'dsfsdf'}}
>>> json.dumps(data)
'{"login_user": {"username": "dfdsfdsf", "password": "dsfsdf"}}'

Я подозреваю, что data уже будет содержаться в GET var, если это происходит с URL ...

1 голос
/ 12 ноября 2010
import re

thestring = "login_user[username]=dfdsfdsf&login_user[password]=dafef"

pattern = re.compile(r'^login_user\[username\]=(.*)&login_user\[password\]=(.*)')
match = pattern.search(thestring)
print match.groups()

Выход: >>> ('dfdsfdsf', 'dafef')

Таким образом,

lp = match.groups()
print "{'login_user': {'username':"+lp[0]+", 'password':"+lp[1]+"}}"

должен нести: >>> {'login_user': {'username':dfdsfdsf, 'password':dafef}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...