我正在使用Play Framework,我正在尝试将Scala对象转换为JSON字符串。
这是我的代码,我得到了我的对象:
val profile: Future[List[Profile]] = profiledao.getprofile(profileId);
该对象现在位于profile
值。
现在我想将profile
Future[List[Profile]]
对象转换为JSON数据,然后将该数据转换为JSON字符串,然后写入文件。
这是我到目前为止编写的代码:
val jsondata = Json.toJson(profile)
Jackson.toJsonString(jsondata)
这是我尝试转换为JSON数据的方式,但它给了我以下输出:
{"empty":false,"traversableAgain":true}
我正在使用Jackson
库进行转换。
有人可以帮我这个吗?
答案 0 :(得分:2)
为什么要打扰杰克逊?如果你正在使用Play,你可以使用select *
from
(values (1),(2),(3)) keys(key)
left join lateral (
select * from crosstab(format($$
with labels (lbl) as (values
('label2'), ('label3'), ('label4')
)
select %1$s, l.lbl, t.amount
from
labels l
left outer join
t on l.lbl = t.label and t.key = %1$s
order by l.lbl
$$, keys.key)) as (
key integer, label2 integer, label3 integer, label4 integer
)
) i using (key)
;
key | label2 | label3 | label4
-----+--------+--------+--------
1 | 15 | 99 |
2 | 10 | | 33
3 | | |
,它使用Jackson FWIW:
首先,您需要隐式play-json
让Reads
知道如何序列化play-json
。如果Profile
是案例类,则可以执行以下操作:
Profile
如果没有,请定义自己的import play.api.libs.json._
implicit val profileFormat = Json.format[Profile]
,如this。
然后,由于Reads
(应遵循约定并且getprofile
)返回getProfile
,您可以执行此操作以获得Future[List[Profile]]
:
JsValue
(val profilesJson = profiledao.getprofile(profileId).map(toJson)
也应为profiledao
。)
最后,您可以将其包含在profileDao
Result
中,并从控制器返回。