Предыстория
Как то довелось мне поработать с 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
флаги-значения:
{ ... }
[ ... ]
[% ... %]
изначально хотел сделать ещё и {% ... %} но постепенно пришёл к выводу, что св-ва объектов лучше определять полностью и конкретно.
Вот собственно в кратце...
В ближайшем будущем доделаю не строгие флаги(в верхнем регистре), которые будут означать, что процессор будет пытаться преобразовать невалидное значение в валидное, а уже потом делать проверку на строгое соответствие.
Мысли, предложения, замечания?