在Scala中,我怎样才能最直接地将MySql查询的结果发送给JSON字符串?我们在“play”框架内工作,并使用“光滑”连接到MySQL,所以我更具体地尝试将slick's StaticQuery SELECT的结果直接映射到play JsValue对象。然而,对于一般问题的任何解决方案都是受欢迎的如何发送Scala的结果StaticQuery SELECT查询直接发送到JSON对象
查询字符串的select参数是动态插入的,它们具有已知的MySQL类型,但我通常不知道编译时的具体参数或它们的数量。
我有一种感觉,有一种巧妙的方法来处理case case和Map对象,但我希望有人已经更简单地解决了这个问题。例如有这个相关的Java Gist。
比如我现在有:
import play.api.libs.json._
import scala.slick.jdbc.{GetResult, StaticQuery => Q}
...
case class SrResult(id: Int, user_id: Int, title: String)
implicit val getSrResult = GetResult(r => SrResult(r.<<, r.<<, r.<<))
val qSql = "SELECT id,user_id,title from MYTABLE LIMIT 10"
val q = Q.queryNA[SrResult](qSql)
我会动态插入“是,USER_ID,标题为”入QSQL字符串,这样Q.queryNA的返回类型“SrResult”是不是在请编译时未知。
为了完整这里是我的工作的示例表:
CREATE TABLE `MYTABLE` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_ID` int(11) NOT NULL,
`TITLE` varchar(254) NOT NULL,
`DESCRIPTION` text
`ARCHIVED` tinyint(1) NOT NULL,
`CREATED_AT` bigint(20) NOT NULL,
`END_DATE` date NULL,
PRIMARY KEY (`ID`),
KEY `TEST_USER_INDEX` (`USER_ID`),
CONSTRAINT `TEST_USER_FK` FOREIGN KEY (`USER_ID`) REFERENCES `USERS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1058 DEFAULT CHARSET=utf8;
谢谢您的回答。我的情况面临的挑战之一是我需要捕获值的隐式JSON类型,而不仅仅是它们的字符串表示。 – mjhm