JSONをBSONにCLIで変換する方法

はじめに

MongoDBで使用されるデータ構造にBSONがある. 研究の過程でJSON形式のデータをBSON形式のデータへ変換する必要があった. CLIで変換できるツールを探したところ,以下のツールが見つかった.

json2bson · PyPI

環境

$ python -V
Python 3.10.8

$ uname -a
Darwin xxx.local 22.3.0 Darwin Kernel Version 22.3.0: Thu Jan  5 20:49:43 PST 2023; root:xnu-8792.81.2~2/RELEASE_ARM64_T8103 arm64

手順

pipを使いjson2bsonをインストールする.

pip install json2bson

パスが通って実行できるか確かめる.

$ json2bson --help
Usage: json2bson [OPTIONS] INPUT_FILE OUTPUT_FILE

  CLI to evaluate maintainability.

Options:
  --help  Show this message and exit.

実際にJSON形式からBSON形式にデータを変換する.

入力データは以下の形式である.

{
  "foo": 10,
  "bar": "BAR"
}

以下のコマンドを実行する.このコマンドではinput.jsonの中身をBSON形式に変換し,output.bsonに保存する

$ json2bson input.json output.bson
Successfully converted input.json to BSON: output.bson.

実際にバイナリ形式に変換されたことがわかる.

$ file output.bson
output.bson: data

$ hexdump -C output.bson
00000000  1b 00 00 00 10 66 6f 6f  00 0a 00 00 00 02 62 61  |.....foo......ba|
00000010  72 00 04 00 00 00 42 41  52 00 00                 |r.....BAR..|
0000001b

JSON形式に戻してみる.CLIで使えるツールには MongoDB の提供する bsondump コマンドがある. ここでは,bsontoolsを使いJSON形式に戻してみる.

dwight/bsontools

bsontoolsのリポジトリはソースコードのみ提供されている.ビルド済みのバイナリが別で公開されているため,以下からダウンロードして使う.

dwight/binaries: prebuilt binaries from peer projects here, and other downloadables

以下は output.bson をJSON形式に変換するコマンドである.

$ ./bson print < output.bson
{ foo: 10, bar: "BAR" }

参考資料