Я работаю с FlatBuffers для решения различных задач в моем проекте, одним из которых является поддержка JSON. Однако, хотя FB изначально поддерживает генерацию JSON, документация для плоских буферов оставляет желать лучшего, и этот процесс несколько громоздок. Сейчас я работаю в направлении Object -> JSON. Проблема, с которой я столкнулся, на самом деле не возникает наоборот (я думаю).
В настоящее время у меня работает JSON генерация в соответствии с примером, который я нашел здесь (строка 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
. Я не хочу загромождать и без того большую монолитную c программу, добавляя еще больше случайных папок, каталогов, переменных среды и т. Д. c. Я хотел бы иметь возможность генерировать JSON из скомпилированных схем FlatBuffer, и мне не нужно искать файл для этого.
Есть ли способ избежать повторного чтения в моем файле? .fbs
схемы в парсере? Моя интуиция указывает на no , но отсутствие документации и поддержки сообщества на topi c FlatBuffers & JSON говорит мне, что может быть выход. Я надеюсь, что есть способ использовать уже сгенерированный MyFBSchema_generated.h
для создания JSON строки.