私のケースクラスとJSONでフィールドの名前を変えたいので、エンコーディングとデコードの両方で名前を変更する快適な方法が必要です。circeでJSONフィールドの名前を変更
誰かが良い解決策を持っていますか?
私のケースクラスとJSONでフィールドの名前を変えたいので、エンコーディングとデコードの両方で名前を変更する快適な方法が必要です。circeでJSONフィールドの名前を変更
誰かが良い解決策を持っていますか?
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)
}
}
}
:ここ