我有一个对象列表,我只需要每个对象的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>
答案 0 :(得分:1)
我建议以这种方式传递数据时,您应该像这样提前构建对象:
<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>
答案 1 :(得分:0)
通过将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(/"/g, "\""));
dataLayer = [{
'userId': '@currentUser.userId',
'firstName': '@currentUser.firstName',
'lastName': '@currentUser.lastName',
'permissions' : permissions
}];
</script>
<!-- Google Tag Manager -->