如何从数据中获取键值

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吗?

是的,这不是正确的方法。

实际上,您可以使用DataPointTemperatures获取weather列表:

weather stuff

并使用iddescription列表中打印DataPointmapM_

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 中的片段?

如何从Android片段中的相机获取图像

如何从数据中获取键值

如何从片段获取数据到另一个活动? (不是容器活动)[重复]

如何从 AppSettings.Config 文件中获取键值?

如何从片段获取数据到活动? [复制]