将 FlatBuffer 对象序列化为 JSON,而不使用其架构文件
Serializing a FlatBuffer object to JSON without it's schema file
我一直在使用FlatBuffers作为我项目中各种事情的解决方案,其中之一就是JSON支持。然而,虽然FB本身支持JSON生成,但flatbuffers的文档很差,而且过程有些繁琐。现在,我正在朝着对象>JSON方向工作。我遇到的问题并没有真正以相反的方式出现(我认为(。
我目前根据我在这里找到的示例(第 630 行,JsonEnumsTest()
(生成 JSON - 通过将.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
模式读回解析器?我的直觉指向不,但是缺乏关于FlatBuffers和JSON主题的文档和社区支持告诉我可能有一种方法。我希望有一种方法可以使用已经生成的MyFBSchema_generated.h
来创建 JSON 字符串。
是的,请参阅文档中的Mini Reflection
:http://google.github.io/flatbuffers/flatbuffers_guide_use_cpp.html
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在h文件中包含.o对象文件
- 如何使用单独文件中的派生类访问友元函数对象
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 使用逗号解析文件对象?
- 使用 CIN COUT 显示垃圾值的文件对象?
- 如何确保我的"ifstream"文件对象指向的文件内容已更新?
- 如何从 GDI+ 图元文件对象获取原始图元文件字节
- pyQt5 将文件对象传递给 QWebEngineView
- 从文件对象的当前位置删除字符
- 使用相同的文件对象按顺序写入和读取文件
- 将 ETW 文件对象与 DiskIO 事件相关联
- 如何在构建时将 JSON 文件/对象包含在C++中
- 如何使用运算符<<通过 << 将文件对象馈送到我的类?
- 确定两个文件路径引用同一文件对象的最佳方法是什么
- 文件映射对象和文件对象可以互换使用吗
- 如何判断给定点是否在STereoLithography(.stl)文件对象c++内
- 如何使用Windows Portable Devices C++API获取MTP设备公开的文件夹中的所有文件(对象)的列
- 如何使用结构传递文件对象
- 文件对象->文件名不返回文件的完整路径