libbson 帮助将数据读入对象 C++

libbson help to read data into object C++

我有我的虚幻项目,必须将一些 BSON 文档数据读出到地图中。

现在我可以加载该文件并使用以下代码将其打印出来:

void AMyActor::BeginPlay()
{
    Super::BeginPlay();

    std::ifstream input( filePath , std::ios::binary );
    std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(input), {});

    bson_t* doc{ bson_new_from_data(buffer.data(),buffer.size()) };
    char *str;
    if( doc != nullptr )
    {
        UE_LOG(LogTemp,Warning,TEXT( "Success" ));

        str = bson_as_json(doc, NULL);
        
        FString fstr = FString(UTF8_TO_TCHAR(str));
        
        UE_LOG(LogTemp, Warning, TEXT("BSON Output: %s"), *fstr);       
    }
}

这是我要存储它的地方:

class Databases
{
    std::map<std::string,DatabaseBase> _dictionary;

    explicit Databases(const std::map<std::string, DatabaseBase>& dictionary)
        : _dictionary(dictionary)
    {
    }
};

所以我正在寻找的是创建一个新的数据库实例并用 bson 文档的内容初始化“_dictionary”。

我实际上是在 libbson 文档中寻找这个:http://mongoc.org/libbson/current/bson_t.html

但是没有成功...有人可以帮助我吗?

提前致谢

PS: 我在 unreal 下,但我已经链接了 libbson 库

更新: 因为我必须提供我的 json 文件的样子,以及 DatabaseBase 的样子

JSON :

{
  "_dictionary" : [ {
      "_classID" : "CC00",
      "_dictionary" : [ {
          "k" : "sample_key",
          "v" : ["ACH_00"]
        }, {
          "k" : "sample_index",
          "v" : ["0"]
        }]
    }, {
      "_classID" : "CC01",
      "_dictionary" : [ {
          "k" : "sample_key",
          "v" : ["ACH_01"]
        }, {
          "k" : "sample_index",
          "v" : ["1"]
        }]
    }]
}

数据库基础:

class DatabaseBase
{
public:
    DatabaseBase() = default;

    std::string sample_key;
    int sample_index; 
};

爆发nlohmann::json

    using nlohmann::json;
    std::map<std::string, DatabaseBase> dictionaries;
    json input = json::from_bson(buffer);
    for (auto& obj : input["_dictionary"]) {
        auto name = obj["_classID"];
        auto key = obj["_dictionary"][0]["v"][0];
        auto idx = stoi(obj["_dictionary"][1]["v"][0].get<std::string>());
        auto db = DatabaseBase{key, idx};
        dictionaries[name] = db;
    }
    Databases dbs{dictionaries};

输出:(来自我的调试器)

(lldb) p dbs
(Databases) [=11=] = {
  _dictionary = size=2 {
    [0] = {
      first = "CC00"
      second = (sample_key = "ACH_00", sample_index = 0)
    }
    [1] = {
      first = "CC01"
      second = (sample_key = "ACH_01", sample_index = 1)
    }
  }
}