Playframework[Scala]:从Twirl中的Scala对象创建JSON列表



我有一个对象列表,其中我只需要每个对象的ID(类型为String(属性。

在视图中,我设置了Google标记管理器,需要将每个对象的ID作为JSON数组传递。我不知道如何在Twirl中做到这一点,因为我正在处理script标记中的Scala对象。我需要每个字符串周围都有引号,用逗号分隔,两边都有括号,就像["one","two","three"]一样。有办法做到这一点吗?

权限值给我带来了麻烦:

@()(implicit currentUser: User = new User())
<script>
dataLayer = [{
'userId': '@currentUser.userId',
'firstName': '@currentUser.firstName',
'lastName': '@currentUser.lastName',
'permissions': ['@currentUser.permissions.map(p => p.permissionId).mkString(",")']
}];
</script>    

我建议在以这种方式传递数据时,提前构建对象,如下所示:

<script>
dataLayer = @Html(Json.toJson(Seq({
"userId" -> currentUser.userId
"firstName" -> currentUser.firstName,
"lastName"" -> currentUser.lastName
"permissions" -> currentUser.permissions.map(_.permissionId)
)).toString);
</script>

另一种选择是预先定义一些隐含的Format[User],并导入它来编写Json:

@import simpleUserJsonFormat
<script>
dataLayer = @Html(Json.toJson(Seq(currentUser)).toString);
</script>

通过将Play中的JSON库与Javascript相结合,我能够获得一个常规的JSON列表。

@()(implicit currentUser: User = new User())
@import play.api.libs.json._
<script>
var rawPermissions = '@Json.toJson(currentUser.permissions.map(p => p.permissionId))';
var permissions = JSON.parse(rawPermissions.replace(/&quot;/g, """));
dataLayer = [{
'userId': '@currentUser.userId',
'firstName': '@currentUser.firstName',
'lastName': '@currentUser.lastName',
'permissions' : permissions
}];
</script>
<!-- Google Tag Manager -->

最新更新