を使用して作る:MyType
はかなり複雑なタイプで、実際には{"field1": "blah", "field2":"ABC"}
ToJSONが、私はこのようになり、データ型がある場合は表示インスタンス
:
data SumType = ABC | DEF deriving (Generic, ToJSON)
data MyType = MyType {field1 :: String, field2 :: SumType} deriving (Generic, ToJSON)
を上記のように見えますJSONを生成します。 ToJSON
は派生していますが、showインスタンスを使用するフィールドを1つだけ調整したいと考えています。
instance Show SumType where
show ABC = "abc-blah"
show DEF = "def-xyz"
残念ながら、上記のShow
インスタンスは(それがすることになっている場合、私は知らない)ToJSON
によってピックアップされません。ハンドローリングToJSON
はSumType
ではありませんはと思われます。キーと値のペアが必要です(別の方法がありますか?)。言い換えれば、JSONは次のようになります:{"field1": "blah", "field2":{"field3": "ABC"}}
- 値を文字列化して新しいオブジェクトを作成しない方法を変更したいだけです。
に対して手動でToJSON
を作成せずに出力文字列をSumType
に変更する方法についてのご意見はありますか?だから出力は{"field1": "blah", "field2":"abc-blah"}
ありがとう!
「SumType」に「ToJSON」を作成する際の問題点は何ですか? 'Show SumType'で定義を使うことができます。 –
@WillemVanOnsem私は 'ToJSON'は'オブジェクト 'しか受け入れないと思った。私はちょうど文字列を返すことができるのか分からなかった。答えに答えを入れると、私はそれを受け入れることができます。 – Ecognium