gpt4 book ai didi

c++ - 将包含数组的 BSON 文档转换为 JSON,从转换后的 JSON (C++) 中删除数组

转载 作者:可可西里 更新时间:2023-11-01 09:47:43 26 4
gpt4 key购买 nike

我有一个看起来像这样的文档:

{
"_id" : ObjectId("5bd37e0128f41363c0006ac2"),
"source" : "Forge",
"data" : [
{
"symbol" : "EURUSD",
"bid" : 1.14021,
"ask" : 1.14024,
"price" : 1.14023,
"timestamp" : 1540587008
}
]
}

我想从 bson 文档中获取数据部分,这是我通过以下代码完成的:

auto dataDocument = view["data"].get_value().get_document();
auto textMessage = bsoncxx::to_json(dataDocument);

然而,当字段数据是示例中的数组时,输出是这样的:

{
"0": {
"symbol": "EURUSD",
"bid": 1.1405199999999999783,
"ask": 1.1405300000000000438,
"price": 1.1405300000000000438,
"timestamp": 1540580136
}
}

而不是这个(正确):

[{
"symbol": "EURUSD",
"bid": 1.14056,
"ask": 1.14057,
"price": 1.14057,
"timestamp": 1540580927
}
]

为什么括号被移除,取而代之的是“0”字段?

如果我在整个文档上执行 to_json,则数组会保留,只有当我在作为数组的字段数据上执行 to_json 时,才会发生错误。

有什么想法吗?

更新,这是一个重现我的问题的工作示例:

#include <mongocxx/instance.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>

int main()
{
mongocxx::instance inst{};
auto conn = mongocxx::client{ mongocxx::uri{} };
auto collection = conn["QuantBot"]["test"];

auto jsonDoc = R"(
{
"source" : "Forge",
"data" : [
{
"symbol" : "EURUSD",
"bid" : 1.13875,
"ask" : 1.13925,
"price" : 1.139,
"timestamp" : 1540758149
}
]
}
)";

auto bsonDocument = bsoncxx::from_json(jsonDoc);
collection.insert_one(bsonDocument.view());

auto cursor = std::make_unique<mongocxx::cursor>(collection.find({}));
auto cursorIt = std::make_unique<mongocxx::cursor::iterator>(cursor->begin());
auto view = bsoncxx::document::view(**cursorIt);
auto dataDocument = view["data"].get_value().get_document();
auto textMessage = bsoncxx::to_json(dataDocument);
}

最佳答案

我相信问题出在这里:get_value().get_document()。尝试用 get_value().get_array() 代替。另请注意,在调用任何方法之前,您应该检查 get_value 返回值的类型。这更多的是靠运气而不是好的设计。您看到文字零的原因是因为 BSON 数组表示为具有整数键的文档。实际上,您已将数组转换为文档,因此它打印为带有数字键的文档,而不是预期的数组。

关于c++ - 将包含数组的 BSON 文档转换为 JSON,从转换后的 JSON (C++) 中删除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com