FromJSON [Object] implementation

时间:2017-06-10 10:25:24

标签: json haskell http-conduit

我有一个需要解析JSON的项目。我得到了一个对象列表,但它们都包含在"数据"键。目前我有一个小对象来帮助我:

data StorageList = StorageList { sl :: [Storage] }

instance FromJSON StorageList where
  parseJSON = withObject "StorageList" $ \v -> StorageList
    <$> v .: "data"

然后我只使用&#34; sl&#34;从结果中获取我的实际列表。

它完美无缺,但我认为我们都同意它很难看。 我想必须有一种更简单的方法来直接解析[Storage],以某种方式告诉parseJSON从内部数据开始。 哦,我正在使用来自http-conduit的httpJSONEither,但是如果没有办法做到这一点我可以改变,我猜想。

编辑:这是存储:

data Storage = Storage { storageId     :: Text
                       , storageName   :: Text
                       , storageNode   :: Text
                       , storageSize   :: Int
                       , storageUsed   :: Int
                       } deriving Show

instance FromJSON Storage where
  parseJSON = withObject "Storage" $ \v -> Storage
    <$> v .: "id"
    <*> v .: "storage"
    <*> v .: "node"
    <*> v .: "maxdisk"
    <*> v .: "disk"

编辑2:我试图解析的是这个:

{
  "data":
  [
    {
      "id": "X",
      "storage": "X",
      ...
    },
    {
      "id": "Y",
      "storage": "Y",
      ...
    },
    ...
  ]
}

希望能更清楚。我正在使用那个丑陋的&#34; StorageList&#34;该对象是为了摆脱包装所有内容的数据密钥而且它有效,但我确信必须有更好的方法来处理它。

0 个答案:

没有答案