приветствую!
вопросы не имеют прямого отношения к с++.
вопрос первый — верно ли утверждение, что 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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)