実装で JSONIC と Jackson のどちらを使うべきか迷ったので、私が調べた範囲でざっくり比較します。
Q. 実際どっちがいいの?
A. 新規実装なら Jackson を使うのが無難。
理由はシンプルで、JSONIC はすでにメンテナンスが終了しているから。
JSONIC は 2018 年にメンテナンスモードへ移行し、2024 年末時点では GitHub のリポジトリもアーカイブ済み。
今後の拡張性やセキュリティアップデートを考えると、継続的にメンテナンスされている Jackson を選ぶのが安全と言えるでしょう。
ただ、両者はデフォルトの仕様の違いがそれなりにあるので、移行時は注意が必要です。
例えば...
ネストの最大深さ(MaxDepth)のデフォルト値は大きく異なります。
- JSONIC:32
- Jackson:1000(現在の Jackson の既定値。古いバージョンだと無制限)
深いネストを許容するほど柔軟になりますが、処理負荷が高くなったり、外部入力のパースで DoS リスクが増す可能性があります。もし JSONIC のデフォルト(32)に合わせて運用していたなら、Jackson でもある程度は深さ制限を設けるのが安心です。
深さ超過時の挙動も両者で異なります。
- Jackson :既定で例外を投げて処理を止める
- JSONIC:設定によっては深さ超過部分が欠落した形で処理を続行する場合がある
Jackson で深さ制限を設定するには
- StreamReadConstraints(2.x 系)で maxDepth を指定可能
例:JsonFactoryBuilder や ObjectMapper の設定で制約を適用
ざっくり比較のまとめ
- 新規開発なら、保守性・セキュリティの継続性の観点からもJackson を推奨
- JSONIC は「簡単・緩め」、Jackson は「基本は厳密・設定で緩めにもできる」という傾向っぽい
- 個人開発や軽いスクリプトなら、緩めに動いてくれる JSONIC が便利に感じることもあるかも