Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Haskell,Aeson-有没有更好的方法从美国农业部数据库获取我需要的信息?_Json_Haskell_Aeson - Fatal编程技术网

Json Haskell,Aeson-有没有更好的方法从美国农业部数据库获取我需要的信息?

Json Haskell,Aeson-有没有更好的方法从美国农业部数据库获取我需要的信息?,json,haskell,aeson,Json,Haskell,Aeson,我是一名Haskell初学者,试图通过美国农业部数据库学习JSON解析 我想从这个链接获取“ndbno”键的值 该链接中的JSON文件如下所示: { "list": { "q": "potato salad", "sr": "1", "ds": "any", "start": 0, "end": 25, "total": 251, "group": "", "

我是一名Haskell初学者,试图通过美国农业部数据库学习JSON解析

我想从这个链接获取
“ndbno”
键的值

该链接中的JSON文件如下所示:

{
    "list": {
        "q": "potato salad",
        "sr": "1",
        "ds": "any",
        "start": 0,
        "end": 25,
        "total": 251,
        "group": "",
        "sort": "n",
        "item": [
            {
                "offset": 0,
                "group": "Branded Food Products Database",
                "name": "AHOLD, DEVILED EGG POTATO SALAD, UPC: 688267141584",
                "ndbno": "45044170",
                "ds": "LI",
                "manu": "Ahold USA, Inc."
            },
            {
                "offset": 1,
                "group": "Branded Food Products Database",
                "name": "AHOLD, REDSKIN POTATO SALAD, UPC: 688267141591",
                "ndbno": "45044169",
                "ds": "LI",
                "manu": "Ahold USA, Inc."
                },
...
“nbdno”
键位于
“项”的第四位

{-#派生通用语言}
模块库
(someFunc)
)在哪里
导入数据.Aeson
将Data.HashMap.Strict导入为HS
导入数据。列表为L
导入数据,也许吧
导入数据.Text
导入数据。向量为V
进口GHC.仿制药
导入Network.HTTP.conductor
导入Text.Pretty.Simple
数据=名称(字符串、文本)
|填充(字符串,Int)
派生(均衡器、读取、显示、通用)
someFunc::IO()
someFunc=putStrLn“正在施工!”
apiKey=”https://api.nal.usda.gov/ndb/search/?format=json&q=chana+dal&sort=n&max=25&offset=0&api_key=jJN9dsKFe507qjLVqbecijtrYB4AiojXVIt1EaEZ“
食物实例
解除应力x=的情况x
字符串x->x
非对象x=的情况x
对象x->x
unArray x=的情况x
数组x->x
getParsed::IO()
getParsed=do
x读x::Int)a
pPrint b
我实现它的方式相当混乱,但它完成了任务


只是代码看起来很糟糕,几乎无法阅读。所以我想知道是否有更好的方法来实现这一点。

定义要反序列化到的类型,例如:

{-# LANGUAGE DeriveGeneric #-}
module Q53251928 where

import Data.Aeson
import GHC.Generics

data Item = Item { ndbno :: String } deriving (Eq, Show, Generic)
instance FromJSON Item

data FoodStuff = FoodStuff { item :: [Item] } deriving (Eq, Show, Generic)
instance FromJSON FoodStuff

data RootJSON = RootJSON { list :: FoodStuff } deriving (Eq, Show, Generic)
instance FromJSON RootJSON
这些类型是访问所有
ndbno
值所需的最小类型。您可以向类型添加其他标签以捕获其他数据,例如
开始
结束
,等等

我在链接中下载了该文件,并尝试从GHCi解码,效果良好:

*Q53251928 Q53251928> decodeFileStrict "download.json" :: IO (Maybe RootJSON)
Just (RootJSON {list = FoodStuff {item = [Item {ndbno = "45044170"},
Item {ndbno = "45044169"},Item {ndbno = "45287938"},Item {ndbno = "45314045"},
Item {ndbno = "45036851"},Item {ndbno = "45036824"},Item {ndbno = "45198766"},
Item {ndbno = "45270526"},Item {ndbno = "45270516"},Item {ndbno = "45374956"},
Item {ndbno = "45215370"},Item {ndbno = "45225694"},Item {ndbno = "45225696"},
Item {ndbno = "45217133"},Item {ndbno = "45053881"},Item {ndbno = "45270521"},
Item {ndbno = "45226407"},Item {ndbno = "45218344"},Item {ndbno = "45225703"},
Item {ndbno = "45335760"},Item {ndbno = "45221588"},Item {ndbno = "45193027"},
Item {ndbno = "45194338"},Item {ndbno = "45194331"},Item {ndbno = "45256801"}]}})
*Q53251928 Q53251928> decodeFileStrict "download.json" :: IO (Maybe RootJSON)
Just (RootJSON {list = FoodStuff {item = [Item {ndbno = "45044170"},
Item {ndbno = "45044169"},Item {ndbno = "45287938"},Item {ndbno = "45314045"},
Item {ndbno = "45036851"},Item {ndbno = "45036824"},Item {ndbno = "45198766"},
Item {ndbno = "45270526"},Item {ndbno = "45270516"},Item {ndbno = "45374956"},
Item {ndbno = "45215370"},Item {ndbno = "45225694"},Item {ndbno = "45225696"},
Item {ndbno = "45217133"},Item {ndbno = "45053881"},Item {ndbno = "45270521"},
Item {ndbno = "45226407"},Item {ndbno = "45218344"},Item {ndbno = "45225703"},
Item {ndbno = "45335760"},Item {ndbno = "45221588"},Item {ndbno = "45193027"},
Item {ndbno = "45194338"},Item {ndbno = "45194331"},Item {ndbno = "45256801"}]}})