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, время: 16:42. |