如何将 bsoncxx::d ocument::element 写入控制台
How to write a bsoncxx::document::element to the console
>我有以下函数,当给定一系列键时,它会从BSON
文档中获取值:
bsoncxx::document::element deepFieldAccess(bsoncxx::document::view bsonObj, const std::vector<std::string>& path) {
if (path.empty())
return {};
auto keysIter = path.begin();
const auto keysEnd = path.end();
auto currElement = bsonObj[*(keysIter++)];
while (currElement && (keysIter != keysEnd))
currElement = currElement[*(keysIter++)];
return currElement;
}
返回的bsoncxx::document::element
可以保存任何类型的值(int32
、document
、array
、utf8
等(。如何通过std::cout
将此元素写入控制台?
理想情况下,我只需要做:
bsoncxx::document::element myElement = deepFieldAccess(bsonObjView, currQuery);
std::cout << myElement << std::endl;
我们不能打印bsoncxx::document::element
,但我们可以打印bsoncxx::document::view
。因此,只需将一个转换为另一个并清理生成的字符串。它丑陋且效率低下,但可以快速查找bsoncxx::document::element
的价值。
std::string turnQueryResultIntoString(bsoncxx::document::element queryResult) {
// check if no result for this query was found
if (!queryResult) {
return "[NO QUERY RESULT]";
}
// hax
bsoncxx::builder::basic::document basic_builder{};
basic_builder.append(bsoncxx::builder::basic::kvp("Your Query Result is the following value ", queryResult.get_value()));
// clean up resulting string
std::string rawResult = bsoncxx::to_json(basic_builder.view());
std::string frontPartRemoved = rawResult.substr(rawResult.find(":") + 2);
std::string backPartRemoved = frontPartRemoved.substr(0, frontPartRemoved.size() - 2);
return backPartRemoved;
}
也许你的意思是这样?
bsoncxx::document::element myElement = deepFieldAccess(bsonObjView, currQuery);
std::cout << myElement.get_utf8().value.to_string() << std::endl;
bsoncxx::document::view
类型具有定义的 JSON 转换,通过bsoncxx/json.hpp
标头中bsoncxx::to_json
的函数表示为std::string
。各个b_xyz
类型不提供此类转换,因为文档或数组结构中不包含的元素不一定是 JSON。不过,您可以自由地形成自己的to_string
函数,并为每种声明的 BSON 类型定义它。
相关文章:
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- C++控制台应用程序阻止退出
- 如何修复此iFile以将.txt输出到控制台
- 为什么控制台要求输入,即使代码中没有输入
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 控制台输出在 Qt5 中未正确显示
- C++出现控制台错误.我无法识别源代码的问题
- C++程序不会从 Windows 控制台运行
- 有人可以向我解释为什么控制台输出 0 吗?
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- Win32 API 控制台光标在 WriteConsole 后不移动
- 如何获取控制台窗口的宽度?
- 如何在 Win32 C++控制台应用程序中调用 UWP 类库
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- 来自Visual Studio中控制台项目的exe文件?
- 为什么即使使用 for 循环遍历我的向量,它也没有输出到控制台?(C++)
- 如何将 bsoncxx::d ocument::element 写入控制台