Сериализация объекта FlatBuffer до JSON без его файла схемы - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю с 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 строки.

1 Ответ

1 голос
/ 13 февраля 2020

Да, см. Mini Reflection в документации: http://google.github.io/flatbuffers/flatbuffers_guide_use_cpp.html

...