我有一个需要解析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;该对象是为了摆脱包装所有内容的数据密钥而且它有效,但我确信必须有更好的方法来处理它。