2016-10-28 15 views
1

私のケースクラスとJSONでフィールドの名前を変えたいので、エンコーディングとデコードの両方で名前を変更する快適な方法が必要です。circeでJSONフィールドの名前を変更

誰かが良い解決策を持っていますか?

答えて

0

EncoderでmapJson関数を使用して、汎用のエンコーダからエンコーダを派生させ、フィールド名を再マップすることができます。

Decoderでprepare関数を使用すると、汎用デコーダに渡されたJSONを変換できます。

両方から書き直すこともできますが、定型文のトンである可能性もありますが、これらの解決策はそれぞれ最大限の数行になるはずです。

val pimpedDecoder = deriveDecoder[PimpClass].prepare { 
    _.withFocus { 
     _.mapObject { x => 
     val value = x("old-field") 
     value.map(x.add("new-field", _)).getOrElse(x) 
     } 
    } 
    } 
:ここ
0

は、(それが古いフィールドを削除しませんので、冗長ビット)デコーダのためのサンプルコードです
関連する問題