首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yesod单个RawSql并以JSON格式返回

Yesod单个RawSql并以JSON格式返回
EN

Stack Overflow用户
提问于 2015-05-08 15:33:37
回答 1查看 82关注 0票数 0

希望你能帮我。

我有一个rawSql:

代码语言:javascript
复制
latestPrice :: Handler [(Single PricesId, Single PersistValue, Single    PersistValue, Single PersistValue, Single PersistValue, Single PersistValue)]
latestPrice = do
  runDB $ rawSql qryStr []
        where qryStr = " SELECT prices.id,\
                            \CONCAT(cities.name, '(', states.code, '), ', countries.name) as city, \
                            \prices.s_id, \
                            \prices.s_name, \
                            \prices.quality, \
                            \AVG(prices.amount) as amount \
                    \FROM prices \
                    \INNER JOIN cities ON cities.id = prices.city_id \
                    \INNER JOIN states ON states.id = cities.state_id \
                    \INNER JOIN countries ON countries.id = states.country_id \
                    \WHERE prices.city_id > 0 \
                    \GROUP BY prices.id, city, prices.strain_id, prices.strain_name, prices.quality, prices.quality;";

我有一个调用该函数的处理程序,应该返回一个JSON格式:

代码语言:javascript
复制
getLatestPriceSubmissionR:: Handler (Value)
getLatestPriceSubmissionR  = do
    results <- latestPrice
    return map (
     \(Single id, Single city, Single s_name, Single strain_id, Single quality, Single amount) -> [ "id" .= id,"city" .=  city,"s_id" .=  s_id,"s_name" .=  s_name, "quality" .= quality,"amount" .= amount ]
   ) results

我的问题是:我在处理程序getLatestPriceSubmissionR中的代码是否正确?它只给我一条警告消息,而不是一条错误消息:

代码语言:javascript
复制
Couldn't match type [[aeson-0.8.0.0:Data.Aeson.Types.Internal.Pair]]
          with Value
Expected type: HandlerT App IO Value
Actual type: HandlerT
             App IO [[aeson-0.8.0.0:Data.Aeson.Types.Internal.Pair]] …

也是

代码语言:javascript
复制
No instance for (ToTypedContent [Value])
arising from a use of yesodRunner

希望你能帮我。

提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2015-05-08 15:40:26

这条线

代码语言:javascript
复制
return map (\(...) -> [ ... ]) results

看起来错了,你的意思可能是

代码语言:javascript
复制
return $ map (\(...) -> [ ... ]) results

此外,这将返回一个列表列表,它不是类型签名中的Value

此外,这是一个错误,而不是警告:

代码语言:javascript
复制
Couldn't match type [[aeson-0.8.0.0:Data.Aeson.Types.Internal.Pair]]
          with Value
Expected type: HandlerT App IO Value
Actual type: HandlerT
             App IO [[aeson-0.8.0.0:Data.Aeson.Types.Internal.Pair]] …
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30118299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档