有一个返回的功能:
>>> ["Just (Number 8000.0)","Just (Number 93.0)","Just (String \"test\")"]
获得价值的最佳方法是什么?
>>> ["8000.0", "93.0", "test"]
代码试图使用prism
来自Aeson的s 来解析JSON .
码
jsonFile :: FilePath jsonFile = "test.json" getJSON :: IO BS.ByteString getJSON = BS.readFile jsonFile main :: IO () main = do input <- getJSON print $ f input f :: BS.ByteString -> [String] f x = [ show $ (x ^? key "a" . nth 0 . key "b") , show $ x ^? key "a" . nth 0 . key "c" , show $ x ^? key "a" . nth 0 . key "d" ]
Koterpillar.. 8
catMaybes from Data.Maybe
只会Just
在列表中保留值,丢弃任何Nothing
s.
(提示:您可以使用Hoogle搜索[Maybe a] - > [a]).
更新:如果要替换Nothing
其他内容,请使用fromMaybe和您的默认值,即
map (fromMaybe "Nothing") (f x)
它看起来像你有字符串而不是Maybe
列表内; 你必须show
从每个元素中删除调用.
再次更新:让我们将所有内容转换为字符串!
map (fromMaybe "nothing" . fmap show)
外部map
将转换应用于每个元素.fmap show
将内部值转换Just
为字符串并Nothing
单独离开(请注意1
转换为字符串的数字"1"
:
> map (fmap show) [Just 1, Nothing] [Just "1",Nothing]
然后fromMaybe "nothing"
解压缩Just
值并替换Nothing
为您选择的字符串.
> map (fromMaybe "nothing" . fmap show) [Just 1, Nothing] ["1","nothing"]
我建议你在使用Haskell时密切关注类型,将所有内容转换为字符串会消除使用类型良好的语言带来的好处.
catMaybes from Data.Maybe
只会Just
在列表中保留值,丢弃任何Nothing
s.
(提示:您可以使用Hoogle搜索[Maybe a] - > [a]).
更新:如果要替换Nothing
其他内容,请使用fromMaybe和您的默认值,即
map (fromMaybe "Nothing") (f x)
它看起来像你有字符串而不是Maybe
列表内; 你必须show
从每个元素中删除调用.
再次更新:让我们将所有内容转换为字符串!
map (fromMaybe "nothing" . fmap show)
外部map
将转换应用于每个元素.fmap show
将内部值转换Just
为字符串并Nothing
单独离开(请注意1
转换为字符串的数字"1"
:
> map (fmap show) [Just 1, Nothing] [Just "1",Nothing]
然后fromMaybe "nothing"
解压缩Just
值并替换Nothing
为您选择的字符串.
> map (fromMaybe "nothing" . fmap show) [Just 1, Nothing] ["1","nothing"]
我建议你在使用Haskell时密切关注类型,将所有内容转换为字符串会消除使用类型良好的语言带来的好处.