Вы можете использовать decode
для чтения JSON ByteString
как Maybe Value
, поскольку Value
уже имеет экземпляр FromJSON
:
*Q54233506 Q54233506> :set -XOverloadedStrings
*Q54233506 Q54233506> decode "{ \"foo\": \"bar\", \"baz\": 42 }" :: Maybe Value
Just (Object (fromList [("foo",String "bar"),("baz",Number 42.0)]))
Оттуда вы можете использовать один из методов, описанных в этом другом ответе , для извлечения данных из Value
.
Например, вы можете использовать линзы из lens-aeson , чтобы извлечь значения foo
и baz
:
*Q54233506 Q54233506> :set -XOverloadedStrings
*Q54233506 Q54233506> v = decode "{ \"foo\": \"bar\", \"baz\": 42 }" :: Maybe Value
*Q54233506 Q54233506> v >>= (^? key "foo")
Just (String "bar")
*Q54233506 Q54233506> v >>= (^? key "baz")
Just (Number 42.0)
Вы можете дополнительно составить это с помощью _String
или _Number
, чтобы извлечь текст или числа:
*Q54233506 Q54233506> v >>= (^? key "foo") >>= (^? _String)
Just "bar"
*Q54233506 Q54233506> v >>= (^? key "baz") >>= (^? _Number)
Just 42.0