Wir versuchen, ein JSON-Objekt mit der Aeson-JSON Hackage mit folgenden Daten zu entschlüsseln:- Gloss - JSON Beispiel Parser: Farbe
data Car = Car
{ carPosition :: Position,
carColor :: Color,
carDirection :: Direction }
deriving (Show, Generic)
eine Instanz für Car
Erstellt und taten das gleiche für die Daten Typen Postion
, Direction
:
instance FromJSON Position
instance FromJSON Direction
instance FromJSON Car
Aber jetzt das Problem beginnt, Color
der Datentyp stammt aus dem Gloss
Hackage und der Wert ist zB geschrieben als Red. Die Color
Daten wissen nur: deriving Show
, also keine Möglichkeit, die deriving Generic
hinzuzufügen. Wir haben versucht, den folgenden Code:
instance FromJSON Color where
parseJSON (Object v) = Color <$>
v .: "carColor"
Sie rügt passend zu nicht-Typ Picture -> Picture
und wir erwarten etwas wie Color
.
Unsere Frage lautet: Wie können wir die Daten Color
von Gloss
verwenden, um ein JSON-Objekt wie
{ "carPostion": { "x": 0, "y": 10}, "carColor": "Red", "carDirection": "Up" }
Wir haben zu lesen versuchen, ein JSON-Objekt ohne carColor
(nur für Testzwecke) zu lesen und dass funktioniert.
UPDATE: Es sieht wie diese Frage aus: Haskell Data.Decimal as Aeson type außer in unserem Fall wollen wir Color
verwenden, wo in der gegebenen wie Data.Decimal
ist der Störenfried.
Wie sieht 'Color' aus? Außerdem macht es für mich keinen Sinn, das so zu analysieren. Ich würde 'parseJSON' auslassen, um eine JSON-Zeichenfolge oder etwas Ähnliches zu parsen. –
@WillemVanOnsem Ich habe meine Frage aktualisiert. Das Hauptproblem ist 'Color', ohne diese Eigenschaft können wir ein JSON-Objekt mit dem gegebenen Code erfolgreich lesen. – Viletung