使用 Flat C 版本 (FlatCC) 很容易将 flatbuffer 缓冲区转换为 JSON。
请参考 flatcc 源路径中的示例测试:flatcc-master/test/json_test。
使用以下命令生成所需的 json 帮助头文件:
flatcc_d -a --json <yourData.fbs>
它将生成 yourData_json_printer.h。在你的程序中包含这个头文件。
修改以下代码以适应<yourData>
. buffer 是从另一端接收到的 flatbuffer 输入。也不要使用 sizeof() 从 bufferSize 获取 flatbuffer。在调用此函数之前打印缓冲区大小
void flatbufToJson(const char *buffer, size_t bufferSize) {
flatcc_json_printer_t ctx_obj, *ctx;
FILE *fp = 0;
const char *target_filename = "yourData.json";
ctx = &ctx_obj;
fp = fopen(target_filename, "wb");
if (!fp) {
fprintf(stderr, "%s: could not open output file\n", target_filename);
printf("ctx not ready for clenaup, so exit directly\n");
return;
}
flatcc_json_printer_init(ctx, fp);
flatcc_json_printer_set_force_default(ctx, 1);
/* Uses same formatting as golden reference file. */
flatcc_json_printer_set_nonstrict(ctx);
//Check and modify here...
//the following should be re-written based on your fbs file and generated header file.
<yourData>_print_json(ctx, buffer, bufferSize);
flatcc_json_printer_flush(ctx);
if (flatcc_json_printer_get_error(ctx)) {
printf("could not print data\n");
}
fclose(fp);
printf("######### Json is done: \n");
}