如何从Scala控制器类中显示正确的json响应?

时间:2016-02-25 06:27:22

标签: json postgresql scala playframework anorm

我试图从Postgresql数据库(v9.5)表中获取json响应以显示在我的视图页面上,我已经尝试了以下内容,因为我的应用程序执行正常,但我没有得到/显示我所需的正确json数据(因为它包含:Stream,slashes()和问号(?),如Stream类型json)。请让我知道如何显示我想要的输出如下? 我的输出:

Stream("[{\"_testid\":{\"testid0\":\"testnumber\"},\"testtitle\":\"TestTitle\"}]", ?)

但是我想要的输出:

[{"_testid":{"testid0":"testnumber"},"testtitle":"TestTitle"}]

contorller:

class Test extends Controller {
    def getTest = Action { 
    var sql: SqlQuery = SQL("select name::TEXT from test");
    def values: String =  DB.withConnection { implicit connection => 
    sql().map(row => row[String]("name")).toString
    }
    Ok(values)
    }

表:

create table test(
    id serial primary key,
    name json not null);

1 个答案:

答案 0 :(得分:1)

如文档中所示,Anorm附带了column parsers的JDBC标准类型。

PostgreSQL JSON类型不是其中之一。它是特定于供应商的类型。

您可以在语句中处理此特定转换,方法是在执行JDBC之前将SQL列强制转换为TEXT(如同简单的JDBC String一样)。

SELECT json_col::TEXT FROM test

您可以实现自定义Column[JsValue](请参阅文档),将特定于PostgreSQL JDBC驱动程序的PGObject转换为Play JsValue

您可以将列映射为anorm.ObjectSqlParser.get[anorm.Object]("col")),并处理应用程序中的不透明值。