基于来自yesod处理程序的持久查询返回JSON

时间:2015-04-10 02:53:54

标签: json haskell yesod

这将是@KonstantineRybnikov关于Return JSON from yesod handler的另一个问题。

如果我想要一个专门的持久性查询selectList并且所有结果数据必须返回JSON格式怎么办?它的代码是什么?

这是我的代码(从@KonstantineRybnikov的代码中采用):

    -- JSON
    import           Data.Aeson      (object, (.=))
    import qualified Data.Aeson      as J
    import           Yesod.Core.Json (returnJson)

    getImagesR :: Handler Value
    getImagesR = do
          images <- runDB $ selectList [ImagesFilename !=. ""] [Desc ImagesDate]
          return $ object (if null images then [] else [] -- i want the result of my perstent to be in a JSON FORMAT)

``

希望你帮我谢谢你。

1 个答案:

答案 0 :(得分:1)

我想你的主要问题是selectList会返回Entity Record列表(其中Record是您要查询的类型)而不是Record,所以我们&#39 ; ll必须使用map entityVal获取记录列表(Entity中定义了entityVal)。你的处理程序将如下所示:

getImagesR = do
  images <- runDB $ selectList [ImagesFilename !=. ""] [Desc ImagesDate]
  returnJson (map entityVal images)

现在只需将[Record]转换为JSON即可。幸运的是,这可以通过将单词json添加到持久模型定义(as shown here)来自动完成。