この問題はthis質問に関連しています。ここで再帰的なJSONを解析しようとしていますが、正しい軌道に乗っていますか?
は、私はJSONからにしたいデータ型です:
data ProdObject = MKSpair (Text, Text)
| MKSLpair (Text, [Text])
| MKSOpair (Text, ProdObject)
| MKObject ProdObject
| End
deriving Show
Here私が働いているデータに加えて、全体の一般化のサンプルです。
ここに私のインスタンス定義があり、エラーが発生しています。私はthisを参考にしています。エラーが私のタイプを修正するように指示しているのか、それとも私が邪魔であるのかは分かりません。エラーが本当にまっすぐである場合は、私のタイプを修正する方法についての助言と、他に何が間違っているかもしれないかまだ気づいていないアドバイスが必要です。
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.
アップデート:ここで
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
は、私が今持っているエラーだ私は私が正しい場合、私は幻の種類を持って、私のデータ型をやり直しました。私が間違っている場合は、図面ボードに戻って
data ProdObject = MKSpair (Text, Text)
| MKSLpair (Text, [Text])
| MKSOpair (Text, ProdObject)
| MKObject ProdObject (k,v)
| End
また、私はこの変更を不完全な方法で反映しています。私はちょうど私が正しい道にいるかどうか尋ねるためにこれを言及する。
parseJSON (Object (k,v)) = MKObject ...
私が正しい道を歩いているなら、残りの部分を見つけ出すか、少なくとも特定の質問をすることができます。フィードバックは誰ですか?この式で
JSONオブジェクトの外観が間違っていると思います。 –
私は渡されたデータが再帰的に見えるので、再帰的にする必要があると思いました。ソリューションをありがとう! –