在没有模式文件的情况下将 FlatBuffer 对象序列化为 JSON

Serializing a FlatBuffer object to JSON without it's schema file

我一直在使用 FlatBuffers 作为我项目中各种事物的解决方案,其中之一就是 JSON 支持。不过FBnatively支持JSON生成,flatbuffers的文档很差,过程有些繁琐。现在,我正在 Object->JSON 方向工作。我遇到的问题并没有真正出现(我认为)。

我目前有 JSON 生成根据我发现的示例 here(第 630 行,JsonEnumsTest())- 通过将 .fbs 文件解析为 flattbuffers::Parser,构建和打包我的 flatbuffer 对象,然后 运行 GenerateText() 生成一个 JSON 字符串。我的代码比 test.cpp 中的示例更简单,看起来像这样:

bool MyFBSchemaWrapper::asJson(std::string& jsonOutput)
{
    //**This is the section I don't like having to do
    std::string schemaFile;
    if (flatbuffers::LoadFile((std::string(getenv("FBS_FILE_PATH")) + "MyFBSchema.fbs").c_str(), false, &schemaFile))
    {
        flatbuffers::Parser parser;
        const char *includePaths[] = { getenv("FBS_FILE_PATH");
        parser.Parse(schemaFile.c_str(), includePaths);
    //**End bad section
        parser.opts.strict_json = true;

        flatbuffers::FlatBufferBuilder fbBuilder;
        auto testItem1 = fbBuilder.CreateString("test1");
        auto testItem2 = fbBuilder.CreateString("test2");

        MyFBSchemaBuilder myBuilder(fbBuilder);

        myBuilder.add_item1(testItem1);
        myBuilder.add_item2(testItem2);
        FinishMyFBSchemaBuffer(fbBuilder, myBuilder.finish());

        auto result = GenerateText(parser, fbBuilder.GetBufferPointer(), &jsonOutput);
        return true;
    }
    return false;
}

这是我的问题:我想避免包含 .fbs 文件来设置我的 Parser。我不想通过添加更多随机文件夹、目录、环境变量等来扰乱一个已经很大的整体程序。我希望能够从编译的 FlatBuffer 模式生成 JSON,而不必搜索一个文件来执行此操作。

有什么方法可以避免将我的 .fbs 模式读回解析器?我的直觉指向 no,但缺乏关于 FlatBuffers 和 JSON 主题的文档和社区支持告诉我可能有办法。我希望有一种方法可以使用已经生成的 MyFBSchema_generated.h 创建一个 JSON 字符串。

是的,请参阅文档中的 Mini Reflectionhttp://google.github.io/flatbuffers/flatbuffers_guide_use_cpp.html