Блог python на хабрахабре
Python / [Из песочницы] Пишем консольный переводчик для *nix на Python
- 21 Окт 14:02
Бомбезное название придумал!
Проблема. У меня в таблице в 2х полях лежить жсон. А в ответ на запрос пользователю я должен вернуть другой дсон, некоторыми ключами которого будут жсоны из наших полей.
Решение в лоп – загрузится с этих полей данные и использовать их в формировании жсона. Но получается дурная работа
тут получается мы гоняем данные из жсона и обратно в холостую. Я тут наклепал небольшой модулик с использованием json чтоб этого не делать
Как видите, теперь данные, которые и так JSON просто оборачиваем в функцию simple и холостого хода не происходит.
A simple JSON-based template engine for Python and Javascript.
В принципе, идея лежит на поверхности: JSON - такой формат, который легко понимается и серверными языками, и джаваскриптом, и часто человеком. Потому хранить какие-то маленькие кусочки информации в виде словаря в одной куке бывает очень даже удобно.
Но есть один момент, который будет неочевиден любому, кто не сильно часто сталкивается с джаваскриптом и вообще особенностями разных браузеров (к примеру, мне ;-) - обязательная экранизация строк. Так, как они экранизуются в урлах. А то FF и IE нормально воспринимают, а Опера и Сафари - нет. ;-)
Напоминание, на всякий случай: в Python для этого есть urllib.quote и unquote, а в JS - escape и unescape.
В принципе, идея лежит на поверхности: JSON - такой формат, который легко понимается и серверными языками, и джаваскриптом, и часто человеком. Потому хранить какие-то маленькие кусочки информации в виде словаря в одной куке бывает очень даже удобно.
Но есть один момент, который будет неочевиден любому, кто не сильно часто сталкивается с джаваскриптом и вообще особенностями разных браузеров (к примеру, мне ;-) - обязательная экранизация строк. Так, как они экранизуются в урлах. А то FF и IE нормально воспринимают, а Опера и Сафари - нет. ;-)
Напоминание, на всякий случай: в Python для этого есть urllib.quote и unquote, а в JS - escape и unescape.
import re
import cjson
import datetime
# Encoding Date objects:
def dateEncoder(d):
assert isinstance(d, datetime.date)
return 'new Date(Date.UTC(%d,%d,%d))'%(d.year, d.month, d.day)
json=cjson.encode([1,datetime.date(2007,1,2),2], extension=dateEncoder)
assert json=='[1, new Date(Date.UTC(2007,1,2)), 2]'
# Decoding Date objects:
re_date=re.compile('^new\sDate\(Date\.UTC\(.*?\)\)')
def dateDecoder(json,idx): json=json[idx:] m=re_date.match(json)
if not m: raise 'cannot parse JSON string as Date object: %s'%json[idx:] args=cjson.decode('[%s]'% \
json[18:m.end()-2]) dt=datetime.date(*args)
return (dt,m.end()) # must return (object, character_count) tuple
data=cjson.decode('[1, new Date(Date.UTC(2007,1,2)), 2]',
extension=dateDecoder)
assert data==[1,datetime.date(2007,1,2),2]