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

Return JSON based on Persistent Query from yesod handler

这将是@KonstantineRybnikov 关于 Return JSON from yesod handler 的附加问题。

如果我想要一个持久查询,具体 selectList 并且所有结果数据必须 return 为 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)

``

希望你能帮助我谢谢。

我猜你的主要问题是 selectList returns Entity Record 的列表(其中 Record 是你查询的类型)而不是 Record,因此我们必须使用 map entityVal 获取记录列表(entityValEntity 中定义)。您的处理程序将如下所示:

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

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