Ce problème est lié à la question this.Essayer d'analyser JSON récursive, suis-je sur la bonne voie?
Voici le type de données que je veux faire de la JSON:
data ProdObject = MKSpair (Text, Text)
| MKSLpair (Text, [Text])
| MKSOpair (Text, ProdObject)
| MKObject ProdObject
| End
deriving Show
Here est un échantillon des données, je travaille avec, en plus d'une généralisation de l'ensemble.
Voici ma définition d'instance, qui provoque une erreur. J'ai utilisé this comme référence. Je ne suis pas sûr si l'erreur me dit de réparer mon type, ou que je suis loin. Si l'erreur est vraiment simple, je voudrais des conseils sur la façon de réparer mon type, ainsi que des conseils sur ce que je peux faire d'autre, mais je n'ai pas encore remarqué.
instance FromJSON ProdObject where
parseJSON (Object o) = MKObject <$> parseJSON o
parseJSON (String s, String t) = MKSpair (s, t)
parseJSON (String s, Object o) = MKSOpair (s, MKObject <$> parseJSON o)
parseJSON (String s, Array a) = MKSLpair (s, V.toList a)
parseJSON (Done d) = End
parseJSON _ = mzero
est ici l'erreur que j'ai en ce moment:
ghcifoo> :load test
[1 of 1] Compiling Main (test.hs, interpreted)
test.hs:23:52:
Couldn't match expected type `Value'
with actual type `Data.Map.Map Text Value'
Expected type: Value
Actual type: Object
In the first argument of `parseJSON', namely `o'
In the second argument of `(<$>)', namely `parseJSON o'
Failed, modules loaded: none.
Mise à jour: J'ai refait mon type de données, si je ne me trompe pas, j'ai un type fantôme. Si je me trompe, retour à la table à dessin
data ProdObject = MKSpair (Text, Text)
| MKSLpair (Text, [Text])
| MKSOpair (Text, ProdObject)
| MKObject ProdObject (k,v)
| End
J'ai également reflété ce changement dans mon exemple, bien que d'une manière incomplète. Je le mentionne juste pour demander si je suis sur la bonne voie ou non.
parseJSON (Object (k,v)) = MKObject ...
Si je suis sur la bonne voie, je pense que je peux soit comprendre le reste, ou au moins poser une question précise. Réaction quelqu'un?
Je pense que ce que j'ai est le mauvais concept de ce à quoi ressemble un objet JSON. –
Je pensais que ça devait être récursif, parce que les données que j'avais reçues me semblaient récursives. Merci pour la solution! –