[snippets] Json
От: Ziaw Россия  
Дата: 10.12.10 20:14
Оценка: 169 (4)
По просьбе трудящихся выложил наброски будущей либы по работе с джейсоном. Пока положил ее в 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 в строку, чего там делает ньютон лишнего я не знаю. Код прямой до безобразия.
Re: [snippets] Json
От: Jack128  
Дата: 10.12.10 20:20
Оценка:
Здравствуйте, Ziaw, Вы писали:


Z>пример использования:

Z>
    
Z>    def parser = JsonParser(); // парсер текстового джейсона
    
Z>    def reloaded = parser.Parse(test.ToString());
    
Z>    match (reloaded)
Z>    {
Z>      | Some(obj) =>
Z>        WriteLine(obj);
Z>        when (obj.ToString() != test.ToString())
Z>          WriteLine("Textual difference");
            
Z>      | None =>
Z>        WriteLine("Cant parse");
Z>    }
Z>


может лудше метод Parse переименовать в TryParse ?
Re[2]: [snippets] Json
От: Ziaw Россия  
Дата: 10.12.10 20:23
Оценка:
Здравствуйте, Jack128, Вы писали:

J>может лудше метод Parse переименовать в TryParse ?


Этот метод генерит пег. TryParse, кстати, там тоже есть.
Re: [snippets] Json
От: hardcase Пират http://nemerle.org
Дата: 13.12.10 10:24
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Сразу скажу, это пока просто эксперимент, эта либа мне понадобится в следующем году. Тогда и буду доводить ее до ума. Сейчас там не хватает кучи фич для нормального конструирования джейсона и автоматической сериализации/десереализации объектов.


Кстати по поводу DSL, он будет похож на Nemerle.Xml?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [snippets] Json
От: Ziaw Россия  
Дата: 13.12.10 11:28
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Кстати по поводу DSL, он будет похож на Nemerle.Xml?


Скорее нет, чем да. Я не вижу смысла вводить условия и циклы. Для этих целей вполне достаточно конструкций в самом языке. Пока в планах DSL добавить динамическое построение списка полей и матч на джейсон. Ну и прозрачную сериализцию/десериализацию.
Re: [snippets] Json
От: Аноним  
Дата: 13.12.10 17:49
Оценка:
Здравствуйте, Ziaw, Вы писали:

Кто такой Джейсон то?
Re[2]: [snippets] Json
От: _nn_ www.nemerleweb.com
Дата: 13.12.10 18:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Ziaw, Вы писали:


А>Кто такой Джейсон то?


http://en.wikipedia.org/wiki/JSON
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: [snippets] Json
От: hardcase Пират http://nemerle.org
Дата: 13.12.10 18:23
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Ziaw, Вы писали:


А>Кто такой Джейсон то?


Ты Пятницу 13е что ли не смотрел?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: [snippets] Json
От: Аноним  
Дата: 13.12.10 18:37
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Ziaw, Вы писали:


А>>Кто такой Джейсон то?


__>http://en.wikipedia.org/wiki/JSON


прочитал, понял, спасибо
Re: [snippets] Json
От: hardcase Пират http://nemerle.org
Дата: 13.12.10 19:44
Оценка:
Здравствуйте, Ziaw, Вы писали:

Отрефакторил парсер.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: [snippets] Json
От: hardcase Пират http://nemerle.org
Дата: 15.12.10 09:34
Оценка: 24 (1)
Здравствуйте, Ziaw, Вы писали:

Z>Сразу скажу, это пока просто эксперимент, эта либа мне понадобится в следующем году. Тогда и буду доводить ее до ума. Сейчас там не хватает кучи фич для нормального конструирования джейсона и автоматической сериализации/десереализации объектов.


Также в качестве эксперимента попробую в ближайшее время сделать сериализатор (и возможно десериализатор) в Json на базе TypeWalker-а.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [snippets] Json
От: Ziaw Россия  
Дата: 15.12.10 16:43
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Также в качестве эксперимента попробую в ближайшее время сделать сериализатор (и возможно десериализатор) в Json на базе TypeWalker-а.


Сам сериализатор/десериализатор дело не самое хитрое, мапперов пруд пруди. Сложнее придумать приличные способы описать маппинг. Желательно без жесткой привязки к джейсону, тогда получится ультра быстрый O2O маппер, что само по себе бывает полезно и в других сценариях.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.