nlohmann::json「JSON for Modern C++」の浮動小数点数の減らし方のメモ
はじめに
nlohmann氏のJSONライブラリである「JSON for Modern C++」はC++環境でのJSONシリアルライズ文字列を読み込みするときに有用に使えるライブラリです。 速度面としては「RapidJSON」のようなライブラリには勝てないんですが、STLの操作面をよく真似していて使いやすいです。
しかし大量の浮動小数点数をシリアルライズ化しようとすると、規約上小数点以下10単位まで書くようになっていてファイルの容量がだいぶ大きくなります。
ここでは「JSON for Modern C++」ライブラリを利用しながら浮動小数点の小数点以下単位を抑える方法を書きたいと思います。
やり方
- ライブラリの
json_fwd.hpp
を開ける。
- 最終ラインの
using json...
を以下のように書き直す。
/*! @brief default JSON class This type is the default specialization of the @ref basic_json class which uses the standard template types. @since version 1.0.0 */ //using json = nlohmann::basic_json<>; using json = nlohmann::basic_json< std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, float>
最後の型引数としてfloat
を書くことで、浮動小数点数をfloat
として取り扱うようにします。これにより、シリアルライズする時に余計な小数点がつかないようになります。
まとめ
float
を使うことと、既存のdouble
を使った時の容量の差は以下の画像で見れます。