如何从数据中获取键值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从数据中获取键值相关的知识,希望对你有一定的参考价值。
我是Haskell的新手,想要为用户解析JSON。
有这种сode:
import Data.Aeson as Q
import Data.Text
import Control.Applicative
import Control.Monad
import qualified Data.ByteString.Lazy as B
import Network.HTTP.Conduit (simpleHttp)
import GHC.Generics
data DataPoint = DataPoint { id :: Int
, description :: String
, icon :: String
} deriving (Show, Generic)
data Temperatures = Temperatures { weather :: [DataPoint]
} deriving (Show, Generic)
instance FromJSON Temperatures
instance ToJSON Temperatures
instance FromJSON DataPoint
instance ToJSON DataPoint`
jsonURL :: String -> String
jsonURL q = "url here hidden"
getJSON :: String -> IO B.ByteString
getJSON town = simpleHttp (jsonURL town)
main :: IO ()
main = do
putStrLn "Hello! Please insert your town >>>
"
town <- getLine
putStrLn ("Your town is: " ++ town ++ "
")
d <- (eitherDecode <$> (getJSON town)) :: IO (Either String Temperatures)
case d of
Left e -> putStrLn "Error occured. Try again please"
Right stuff -> putStrLn (fmap weather) $ stuff
想要显示id和描述但是映射方式不正确,是int吗?并且可以存储这样或我应该的数据
答案
想要显示id和描述但是映射方式不正确,是int吗?
是的,这不是正确的方法。
实际上,您可以使用DataPoint
从Temperatures
获取weather
列表:
weather stuff
并使用id
从description
列表中打印DataPoint
和mapM_
:
import Control.Monad (mapM_)
import Prelude hiding (id)
...
Right stuff -> mapM_ (d->putStrLn (show (id d) ++ " " ++ (description d)))
(weather stuff)
...
注意,它需要隐藏id
中的Prelude
函数。否则将发生Ambiguous occurrence
错误。
以上是关于如何从数据中获取键值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Firebase 获取数据到 Recyclerview 中的片段?