逃避大括号{在Velocity中

时间:2011-04-15 14:01:58

标签: java velocity

抱歉:这是我的坏事。此错误是由于json生成错误以及Chrome扩展程序“Chrome中的JSONView”造成的。看看我自己的答案(我必须自己回答 - 因为我不能再删除这个问题了。)

我使用Velocity(orven.apache.velocity的Maven版本1.7)作为模板引擎,我想要输出如下:

{
   total : 234
}

现在当我尝试:

{
    total : $listing.size()
}

我收到错误:

Error: Parse error on line 1:
{   total : 0}
--^
Expecting 'STRING', '}'

enter image description here

当我试图逃避花括号时:

\{
    total : $listing.size()
\}

我在最终输出中得到了转义字符!:

\{
   total : 234
\}

4 个答案:

答案 0 :(得分:1)

很抱歉这是由于我生成的JSON不正确,Chrome浏览器的扩展程序“JSONView”向我指出。这是因为我的钥匙不是字符串......即我有:

 {total: 0}

但我应该:

 {"total" : 0}

答案 1 :(得分:1)

确实有更好的方法可以做到这一点。

使用此处接受的答案(How to XML escaping with Apache Velocity?)进行初始设置

您还需要添加velocity-tools依赖项:

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-tools</artifactId>
    <version>2.0</version>
</dependency>

然后你可以像这样使用Velocity Engine的转义机制(对于你的情况)

$esc.java("{total: 0}")

您还可以在此处查看更多转义选项(http://velocity.apache.org/tools/devel/generic/EscapeTool.html

答案 2 :(得分:0)

我最终创建了一个常量ocb = {ccb = }并使用$ocb$ccb

我相信有更好的方法。 ;)

答案 3 :(得分:0)

以下是您的情况: http://velocity.apache.org/engine/devel/user-guide.html#escapinginvalidvtlreferences

<强>更新

首先尝试这样做:

#set( $startbrace = "{" )
#set( $endbrace = "}" )

然后将您的文字设为:

$startbrace
    total : $listing.size()
$endbrace