Передача списка Python с использованием JSON и Django - PullRequest
1 голос
/ 12 марта 2010

Я пытаюсь отправить список Python на стороне клиента (в кодировке JSON). Вот фрагмент кода, который я написал:

array_to_js = [vld_id, vld_error, False]
array_to_js[2] = True
jsonValidateReturn = simplejson.dumps(array_to_js)
return HttpResponse(jsonValidateReturn, mimetype='application/json')

Как получить к нему доступ со стороны клиента? Могу ли я получить к нему доступ следующим образом?

jsonValidateReturn[0]

Или как мне присвоить имя возвращенному массиву JSON для доступа к нему?

На самом деле я пытаюсь преобразовать серверный Ajax-скрипт, который возвращает массив (см. Вопрос переполнения стека Создание ответа JSON с использованием Django и Python , который обрабатывает POST-запросы на стороне клиента Так что я хотел получить то же самое взамен с Python, но все пошло не так.

Ответы [ 2 ]

1 голос
/ 12 марта 2010

Массив JSON будет выгружен без имени / назначения.

То есть, чтобы дать ему имя, в вашем коде JavaScript вы должны сделать что-то вроде этого:

var my_json_data_dump = function_that_gets_json_data();

Если вы хотите визуализировать это, например, замените:

var my_json_data_dump = { 'first_name' : Bob, 'last_name': smith };

Кроме того, как сказал Иганасио, вам понадобится что-то вроде json2.js для анализа строки в объекте в последнем примере. Вы можете обернуть этот шаг разбора внутри function_that_gets_json_data, или, если вы используете jQuery, вы можете сделать это с помощью функции, подобной jQuery.getJSON () .

json2.js все равно приятно иметь.


В ответ на комментарий (мне нужны пробел и разметка):

Да, конечно. Все, что делает сторона Python - это кодирование строкового представления (JSON) для вас. Вы можете сделать что-то вроде 'var blah = %s' % json.dumps(obj_to_encode) и затем на стороне клиента, вместо того, чтобы просто анализировать ответ как JSON, вы анализируете его как JavaScript.

Я бы не рекомендовал это по нескольким причинам:

  1. Вы больше не выводите JSON. Что если вы хотите использовать его в контексте, в котором вам не нужно имя переменной или вы не можете разобрать JavaScript?
  2. Вы оцениваете JavaScript вместо простого анализа JSON. Эта операция открыта для дыр в безопасности (если кто-то может заполнить данные, он может выполнить атаку XSS ).

Полагаю, вы столкнулись с чем-то, к чему, как мне кажется, стремится каждый разработчик Ajax Вам нужно одно правдоподобие в вашем приложении, но теперь вам предлагается определять переменные и все такое в JavaScript. Таким образом, вы должны сопоставить свой код Python с кодом JavaScript, который его использует.

Я бы не стал слишком зацикливаться на этом. Я не понимаю, почему вам так нужно было бы контролировать имя переменной из Python. Если вы рассчитываете на то, что имя переменной совпадает, и вы можете ссылаться на нее в последующем коде JavaScript или Python, вы можете избежать этого, просто перестроив свой код. Я не имею в виду это как критику, просто очень полезное (в общем) предложение!

0 голосов
/ 12 марта 2010

Если и клиент, и сервер находятся в Python, вот что вам нужно знать.

Сервер . Используйте словарь, чтобы получить метки на полях. Запишите это как ответ.

>>> import json
>>> json.dumps( {'vld_id':1,'vls_error':2,'something_else':True} )
'{"vld_id": 1, "something_else": true, "vls_error": 2}'

Клиент . Прочитав строку ответа, создайте словарь Python следующим образом.

>>> json.loads( '{"vld_id": 1, "something_else": true, "vls_error": 2}' )
{u'vld_id': 1, u'something_else': True, u'vls_error': 2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...