Целочисленные переменные не сохраняются в плоских буферах с использованием python

Я вижу странную проблему с использованием плоских буферов на питоне. Я пытаюсь сохранить значение переменной, которое является целым числом, однако, когда я генерирую JSON из полученного файла .bin, значения ключа/целого числа там не будет. Однако, если я просто передаю целое число, все работает нормально?

Нужно ли мне делать какое-то приведение или генерировать целочисленный тип так же, как я делаю это для строк?

Вот пример кода, который я запускаю:

    varInt = 1

    SomeClass.SomeClassStart(my_builder)
    SomeClass.SomeClassAddMyValue(my_builder, varInt)
    SomeClass.SomeClassAddMyOtherValue(my_builder, 2)
    some_class_buffer = SomeClass.SomeClassEnd(my_builder)

который производит json из:

   some_class:{
       my_other_value: 2
   }

Я не понимаю, почему один способ работает, а другой нет? У меня нет большого опыта работы с python, а плоские буферы для меня совершенно новые, поэтому не уверен, есть ли какой-то нюанс, о котором я не знаю?

Любая помощь приветствуется.


person Jonathan McLaughlin    schedule 13.02.2020    source источник


Ответы (1)


Я нашел проблему с этим. Оказывается, мне пришлось настроить билдер так, чтобы для переменной forceDefaults было установлено значение true.

my_builder.forceDefaults = True
person Jonathan McLaughlin    schedule 13.02.2020
comment
На самом деле, вам это не нужно, так как при этом создаются двоичные файлы большего размера, чем необходимо. FlatBuffers не хранит поля, равные значениям по умолчанию, в качестве оптимизации. Вы не видите их в JSON, потому что они по умолчанию. Если вы хотите принудительно просмотреть их все в формате JSON, передайте --defaults-json в flatc. - person Aardappel; 13.02.2020
comment
@Aardappel большое спасибо за это. Очень полезно! Я думаю, если бы я играл со значениями, которые не были по умолчанию, я бы заметил это. - person Jonathan McLaughlin; 17.02.2020