[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 в строку, чего там делает ньютон лишнего я не знаю. Код прямой до безобразия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.