XJSONS или как я полторы недели издевался над своим мозгом
Предыстория
Как то довелось мне поработать с php праграммисткой в паре... Работали над модулем в котором активно перегонялись данные в json, причём количество полей зашкаливало. Этот опыт натолкнул меня на некоторые мысли... Позже погуглив, узнал что есть такая штука json shema. Кто бы мог подумать... К тому моменту я уже составил доки для своего формата. К счастью, все имплементации json схем, что я видел, оказались не совсем тем, что я хотел бы видеть в итоге, да и по размерам не айс... В общем, начал реализовывать идею сам:) . ** Делаю доступной, альфа версию... Рассмотрим пример(API пока корявое): [Можно поиграться здесь: http://redjs.org/xjsons/] var target = { general_info: { name: 'Archy', surname: 'Sharp', age: 21, location: 'Belarus' }, achievements: [ { distance: 0.1, time: 11.3 }, { distance: 6, time: 30 }, { distance: 10, time: 50 } ] }, xjsons = _.xjsons('{\ general_info(general): {\ (name): s,\ (surname): s,\ (age): i,\ (location): s\ },\ achievements(results): [%{\ (distance): d,\ (time): d\ }%]\ }'), processor = _.xjsonsProcessor(xjsons.parse(), target); processor.error(function(msg) { alert(msg); }); processor.process(); /* target = { general: { name: 'Archy', surname: 'Sharp', age: 21, location: 'Belarus' }, results: [ { distance: 0.1, time: 11.3 }, { distance: 6, time: 30 }, { distance: 10, time: 50 } ] } */ Что это такое? target - любой объект(например отправленный сервером) xjsons - экземпляр парсера xjsons-а processor - экземпляр обработчика xjsons-а Синтаксис похож на JSON за исключением: 1. свойства объектов объявляются так targetOldPropName(targetNewPropName) 2. есть конструкция [% .... %] которая задаёт шаблон для значения цели([1, 2, 3] = [%i%]). Обычным массивом[] задаются флаги для св-в с конкретным индексом. флаги: i - integer f - float d - digit b - bool u - undefined s - string n - null флаги-значения: { ... } [ ... ] [% ... %] изначально хотел сделать ещё и {% ... %} но постепенно пришёл к выводу, что св-ва объектов лучше определять полностью и конкретно. Вот собственно в кратце... В ближайшем будущем доделаю не строгие флаги(в верхнем регистре), которые будут означать, что процессор будет пытаться преобразовать невалидное значение в валидное, а уже потом делать проверку на строгое соответствие. Мысли, предложения, замечания? |
1. как по ссылке играться? есть там подкладка (колбек), чтобы сюда постить результаты экспериментов?
2. в разных браузерах, вроде как, нет точного следования значений в хешах - т.е. порядок может меняться, и в примере general_info может поменяться местами с achievements. у Вашем скрипте это учитывается? 3. зачем это всё - цель какая была? с прмиера я понял, что для быстрой и решительной обработки значений\имен в хешах. |
1. По ссылке просто голый билд redJS библиотеки с модулем xjsons.
То есть играться можно в консоли... Какого-то более удобного способа с ходу не придумал. 2. Если я правильно понял, то да. 3. Цель - иметь одну, чётко контролируемую точку взаимодействия с сервером в проектах в высокой изменяемостью. Грубо говоря: Завтра бэк-эндер решит поменять general_info на generalInfo, мне в скрипте надо одно слово изменить. Завтра придет новый бэк-эндер и перепишет свой модуль с нуля. Если у него какие-то недочёты в отсылаемом json-е, все это сразу заметят. + Задел на будущее для юнит тестирования. |
Часовой пояс GMT +3, время: 14:45. |