json/bson, вопросы реализации
От: niXman Ниоткуда https://github.com/niXman
Дата: 04.03.15 15:06
Оценка:
приветствую!

вопросы не имеют прямого отношения к с++.

вопрос первый — верно ли утверждение, что json не гарантирует порядок пар 'key:value'?
дело в том, что, хочу для YAS реализовать json сериализатор/десериализатор, но с одной оговоркой: десериализатор расчитывает, что порядок пар соблюден.
т.е., пример:
#define MAKE_NVP(var) \
   std::make_pair(#var, std::ref(var))

struct mystruct {
   int a;
   string b;
   double c;

   template<typename Ar>
   void serialize(Ar &ar) {
      ar & MAKE_NVP(a)
         & MAKE_NVP(b)
         & MAKE_NVP(c);
   }
};

mystruct ms0, ms1;
oarchive oa;
oa & ms0; // save

iarchive ia(oa.get_intrusive_buffer());
ia & ms1; // тут десериализатор расчитывает, что записи в буфере будут следовать строго 'a,b,c'.

причина такой оговорки в том, что реализация десериализатора которому будет пофег порядок — слишком оверхедна, в сравнении "с", в виду того, что стандартная десериализация требует сначала десериализовать весь поток, потом положить объекты в карту, и только потом из карты извлекать их по имени. ну это же оверхедный рай!

на практике же, в одном из проектов я поступил так:
реализовал препроцессорный кодогенератор, который генерит структуры используемые в качестве сообщений. каждая такая структура содержала метод сериализации/десериализации специализированный таким образом, чтоб для 'binary_oarchive' и 'json_oarchive' выполнялась сериализация выполнялась разными способами. так, для 'json_oarchive' генерировался код, который стандартными средствами С++ умел выводить объект такой структуры сразу в json строку, без каких-либо телодвижений. для десериализации же пришлось использовать стороннюю либу.
собственно, алгоритмическая сложность десериализации СТАНДАРТНОГО json, и останавливает меня от реализации json в YAS.

вопрос второй — как альтернативу json, хочу реализовать bson, который не имеет указанного недостатка json, и, таким образом, реализация может получиться весьма эффективной.
спека тут.
собственно вопросы:
1. посмотрипе пожалуйста описание типа 'Null value'. с ним все в порядке? там нет никакой ошибки?
дело в том, что bson, как и json — набор пар, но тип 'Null value' ведь не пара. т.е. это просто ключ, без значения. так и должно быть?
2. тип 'ObjectId' — тоже загадка. ссылка ведет сюда, и, я даже кое-что понял. но мне совершенно не понятно, как мне поступить в С++ реализации, и как использовать этот 'ObjectId'?
3. такой же вопрос и по типу 'JavaScript code w/ scope'. как реализовать, и что мне с ним делать?


пост чота большой получился...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.