#c #json #mongodb #bson #mongo-cxx-driver
#c #json #mongodb #bson #mongo-cxx-драйвер
Вопрос:
В настоящее время я пытаюсь вставить файл JSON в мой MongoDB. Я уже видел, что это было решено с помощью mongo::BSONObj в прошлом… Но, похоже, это не вариант, поскольку они выпустили новый драйвер mongocxx для c 11. Это то, что я нашел в файлах src bsoncxx:
BSONCXX_API document::value BSONCXX_CALL from_json(stdx::string_view json);
/// Constructs a new document::value from the provided JSON text
///
/// @param 'json'
/// A string_view into a JSON document
///
/// @returns A document::value if conversion worked.
///
/// @throws bsoncxx::exception with error details if the conversion failed.
///
Как мне перенести мой файл JSON в stdx::string_view
?
Спасибо!
Ответ №1:
bsoncxx::stdx::string_view
Может быть сконструирован из std::string
. Просто загрузите содержимое вашего файла (при условии, что он содержит один объект JSON) в std::string
(возможно, через std::ifstream
) и передайте это std::string
в bsoncxx::from_json
. Объект, возвращаемый из bsoncxx::from_json
, является bsoncxx::document::value
типом, владеющим ресурсами, который содержит документ BSON.
Комментарии:
1. Спасибо за ваш ответ, сработал хорошо! есть ли способ загружать не только один объект (например, массивы и прочее) одновременно?
2. Заключающий объект должен быть объектом, но он, безусловно, может содержать вложенные массивы и другой объект и т.д. Если вы хотите загрузить несколько документов JSON, хранящихся последовательно в текстовом файле, во что-то вроде
std::vector
ofbsoncxx::document::value
, то нет, у нас нет чего-то подобного, но это было бы просто реализовать самостоятельно.3. Сделать
bsoncxx::document::value bsonObj = bsoncxx::from_json(your_json_string);