FlatBuffers - 二进制到JSON



概述

JSON 是一种非常流行的网络数据传输格式。为了提供 JSON 兼容性,FlatBuffers 编译器 flatc 具有将源 JSON 转换为 FlatBuffers 二进制格式的选项,然后可以使用该格式反序列化最初由 JSON 表示的对象。我们在上一章FlatBuffers - JSON 到二进制中已经实践了这一点。现在,我们将执行反向操作,从 FlatBuffers 二进制文件中检索 JSON。

考虑上一章FlatBuffers - JSON 到二进制中创建的 theater.bin 文件。

以下是 FlatBuffers 编译器正确解释二进制数据所需的模式。

theater.fbs

namespace com.tutorialspoint.theater;

table Theater {
   name:string;
   address:string;
   mobile:int;
}
root_type Theater;

生成 JSON

现在,让我们首先使用以下命令从我们的二进制文件 (**theater.bin**) 获取所需的 json (**theater.json**)。

flatc --json --raw-binary theater.fbs -- theater.bin

它将在当前文件夹中创建 theater.json,如下所示。

{
   name: "Silver Screener",
   address: "212, Maple Street, LA, California",
   mobile: 12322224
}

严格模式

flatc 生成最小的 json。如果我们需要使用其他工具处理 JSON 并需要正确的带引号的标识符,则可以使用 **--strict-json**,如下所示

flatc --json --raw-binary theater.fbs -- theater.bin --strict-json

它将在当前文件夹中创建 theater.json,如下所示。

{
   "name": "Silver Screener",
   "address": "212, Maple Street, LA, California",
   "mobile": 12322224
}

默认值

默认情况下,flatc 编译器忽略默认值,并且默认值不会存储在二进制表示中。因此,这些值也不会出现在 JSON 中。为了实现这一点,我们可以使用 **--defaults-json** 选项,如下例所示。

让我们将 mobile 值保留为 json 中的默认值。

theater.json

{
   "name" : "Silver Screener",
   "address" : "212, Maple Street, LA, California",
   "mobile": 0
}

现在,让我们首先使用以下命令根据我们的模式 (**theater.fbs**) 获取 json (**theater.json**) 的 FlatBuffers 二进制表示。

flatc --binary theater.fbs theater.json

生成不带默认值的 JSON

现在,让我们首先使用以下命令从我们的二进制文件 (**theater.bin**) 获取所需的 json (**theater.json**)。

flatc --json --raw-binary theater.fbs -- theater.bin

它将在当前文件夹中创建 theater.json,如下所示。

{
   name: "Silver Screener",
   address: "212, Maple Street, LA, California"
}

生成带默认值的 JSON

现在使用 **--defaults-json** 选项生成 JSON。

flatc --json --raw-binary theater.fbs -- theater.bin --defaults-json

它将在当前文件夹中创建 theater.json,如下所示。

{
   name: "Silver Screener",
   address: "212, Maple Street, LA, California",
   mobile: 0
}
广告