Copy Source | Copy HTML- from django.utils import simplejson
-
- class DatetimeJSONEncoder(simplejson.JSONEncoder):
-
- class DateInt(int):
- '''
Наследуемся от int, потому что тогда значение будет без "".
В других случаях получим: "new Date(100500)" и при eval будет просто
строка.
'''
- def __str__(self):
- return 'new Date(%s)' % (self*1000)
-
- def default(self, o):
- from django.utils import datetime_safe
- from datetime import datetime
- import time
-
- if isinstance(o, datetime):
- d = datetime_safe.new_datetime(o)
- return self.DateInt(int(time.mktime(d.timetuple())))
- else:
- return super(DatetimeJSONEncoder, self).default(o)
-
- #example
- from datetime import datetime
- from django.utils import simplejson
-
- data = dict(date=datetime.now())
- json = simplejson.dumps(data, cls=DjangoJSONEncoder)
пятница, 23 июля 2010 г.
Python datetime to javascript Date
В Django есть DjangoJSONEncoder, который используется при конвертировании данных в json-формат. Он форматирует дату в строку. Пришлось написать свой енкодер, что бы на клиенте получать обьект Date, а не строку.
Теги:
javascript,
Python
Подписаться на:
Комментарии к сообщению (Atom)
Извращение какое-то, и уж точно обрабатывать JSON на клиенте через eval это уже ниже плинтуса.
ОтветитьУдалитьИМХО грязный хак. В итоге получаешь нечто не удовлетворяющее стандарту JSON.
ОтветитьУдалить> Извращение какое-то, и уж точно обрабатывать
ОтветитьУдалить> JSON на клиенте через eval это уже ниже плинтуса.
JSON я сам не обрабаваю, пользовался ExtJS или jQUery.
Вот кусок кода из ExtJs:
doDecode = function(json){
return eval("(" + json + ')');
},
Вот как в jQuery: http://github.com/jquery/jquery/blob/master/src/core.js#L500
что практически равнозначно.
А как вы обрабатываете JSON?
Да, это грязный хак. Иначе пришлось бы хакать на клиенте.
ОтветитьУдалить