По просьбе трудящихся выложил наброски будущей либы по работе с джейсоном. Пока положил ее в snippets/peg-parser/Json, когда решится вопрос о dirhier она будет перенесена.
Сейчас в ней есть парсер джейсона в ast и макрос для создания ast джейсона прямо в коде:
пример использования:
def arr = json([ 1, 2 ]); // создание массиваdef obj = json({ "a" : 1; "b": arr} ); // создание объектаdef test = json({
a : arr; // внедрение массива в другой объект
b : obj; // внедрение объекта в другой объект
c : null;
d : true;
e : { a : 1; "la la": null};
"f" : [true];
j : (43 + 55); // в j запишется 98, допустимы любые выражения приводящиеся к типам джейсона: string, bool, double, скобки обязательны
});
WriteLine(test); // test.ToString() выдает текстовый джейсонdef parser = JsonParser(); // парсер текстового джейсонаdef reloaded = parser.Parse(test.ToString());
match (reloaded)
{
| Some(obj) =>
WriteLine(obj);
when (obj.ToString() != test.ToString())
WriteLine("Textual difference");
| None =>
WriteLine("Cant parse");
}
Сразу скажу, это пока просто эксперимент, эта либа мне понадобится в следующем году. Тогда и буду доводить ее до ума. Сейчас там не хватает кучи фич для нормального конструирования джейсона и автоматической сериализации/десереализации объектов.
Ньютон джейсон там только для бенчмарков, он не нужен для работы библиотеки. Парсер я переписал и он стал чуть медленнее, но все равно рвет ньютона. Что странно, неплохо рвет и сериализация ast в строку, чего там делает ньютон лишнего я не знаю. Код прямой до безобразия.
Здравствуйте, Ziaw, Вы писали:
Z>Сразу скажу, это пока просто эксперимент, эта либа мне понадобится в следующем году. Тогда и буду доводить ее до ума. Сейчас там не хватает кучи фич для нормального конструирования джейсона и автоматической сериализации/десереализации объектов.
Кстати по поводу DSL, он будет похож на Nemerle.Xml?
Здравствуйте, hardcase, Вы писали:
H>Кстати по поводу DSL, он будет похож на Nemerle.Xml?
Скорее нет, чем да. Я не вижу смысла вводить условия и циклы. Для этих целей вполне достаточно конструкций в самом языке. Пока в планах DSL добавить динамическое построение списка полей и матч на джейсон. Ну и прозрачную сериализцию/десериализацию.
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Ziaw, Вы писали:
А>>Кто такой Джейсон то?
__>http://en.wikipedia.org/wiki/JSON
Здравствуйте, Ziaw, Вы писали:
Z>Сразу скажу, это пока просто эксперимент, эта либа мне понадобится в следующем году. Тогда и буду доводить ее до ума. Сейчас там не хватает кучи фич для нормального конструирования джейсона и автоматической сериализации/десереализации объектов.
Также в качестве эксперимента попробую в ближайшее время сделать сериализатор (и возможно десериализатор) в Json на базе TypeWalker-а.
Здравствуйте, hardcase, Вы писали:
H>Также в качестве эксперимента попробую в ближайшее время сделать сериализатор (и возможно десериализатор) в Json на базе TypeWalker-а.
Сам сериализатор/десериализатор дело не самое хитрое, мапперов пруд пруди. Сложнее придумать приличные способы описать маппинг. Желательно без жесткой привязки к джейсону, тогда получится ультра быстрый O2O маппер, что само по себе бывает полезно и в других сценариях.