Playframework [Scala]:从 Twirl 中的 Scala 对象创建 JSON 列表
Playframework [Scala]: Create JSON List from Scala object in Twirl
我有一个对象列表,其中我只需要每个对象的 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>
通过将 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 -->
我建议在以这种方式传递数据时,像这样提前构建对象:
<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>
我有一个对象列表,其中我只需要每个对象的 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>
通过将 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 -->
我建议在以这种方式传递数据时,像这样提前构建对象:
<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>