🤩

Erlang/OTP 標準の JSON ライブラリに切り替えた

2024/12/02に公開

概要

Erlang/OTP 27.0 から標準ライブラリに JSON ライブラリが含まれるようになりました。そこで jsone から標準ライブラリの json に切り替えることにしました。

まとめ

  • Erlang/OTP 27.0 から JSON ライブラリが標準ライブラリに含まれるようになった
  • jsone から切り替えた
  • 標準ライブラリの json ラップをして jsone 互換にした shiguredo/json を公開した

経緯

今までは jsone を利用していました。特に困ることもなく、公開されてから 8 年近く利用し続けてきました。そんな中 OTP 27.0 から標準ライブラリに JSON ライブラリが含まれるようになりました。できるだけ標準ライブラリを使うべきという理由が一番の理由です。

方針

jsone で利用している機能のうち、標準ライブラリにはない便利機能を追加した shiguredo/json を開発して、公開することにしました。

ライブラリ名を名前をどうするか悩みましたが、移行を容易にするため jsone のままにしました。

hex.pm には shiguredo_jsone というパッケージ名で公開する事にしました。

実装

エンコーダー

エンコーダーで実装したのは、 undefined の扱いと浮動小数点数のエンコードをカスタマイズするオプションです。

  • skip_undefined
    • undefined の場合はエンコードをスキップするオプション
  • undefined_as_null
    • undefined の場合は null に変換するオプション
  • {float_format, [{scientific, Decimals :: 0..249} | {decimals, Decimals :: 0..253} | compact | short]}
    • 浮動小数点数のエンコードをカスタマイズするオプション

デコーダー

デコーダーで実装したのは、デコード時にキーを atom に変換するオプションです。

  • {keys, attempt_atom}
    • キーが atom として存在した場合は atom に変換するオプション
    • 存在しない場合は binary のまま

雑感

移行は特に問題無くできました。これで 1 つ外部依存ライブラリが減りました。よほどのことがない限りバージョンを上げる必要もないと思うので、メンテナンスコストはとても小さいと思います。

Discussion