Экранирование фигурной скобки { в Velocity

ИЗВИНИТЕ: Это мой плохой. Эта ошибка связана с неправильным созданием json и расширением Chrome «JSONView in Chrome». Смотрите мой собственный ответ (мне пришлось ответить на это самому, так как я больше не мог удалить вопрос).

Я использую Velocity (Maven версии 1.7 org.apache.velocity) в качестве механизма шаблонов и хочу, чтобы результат выглядел следующим образом:

{
   total : 234
}

теперь, когда я пытаюсь:

{
    total : $listing.size()
}

Я получаю сообщение об ошибке:

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

введите здесь описание изображения

и когда я пытаюсь избежать фигурных скобок:

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

Я получаю escape-символы в окончательном выводе!:

\{
   total : 234
\}

person Andriy Drozdyuk    schedule 15.04.2011    source источник
comment
Хм? Velocity не заботятся об одиночных фигурных скобках. Им не нужно бежать. Какую версию ты используешь? А можешь показать остальную часть своей ошибки синтаксического анализа?   -  person Nathan Bubna    schedule 15.04.2011
comment
Я получаю сообщение об ошибке - я не установил правила. Это все ошибки, которые я получаю в небольшом всплывающем окне javascript, что странно, потому что я не вижу js в источнике.   -  person Andriy Drozdyuk    schedule 15.04.2011
comment
Я использую версию от Maven — org.apache.velocity 1.7   -  person Andriy Drozdyuk    schedule 15.04.2011
comment
Скобка сама по себе не должна быть проблемой, у меня есть много шаблонов, которые содержат в себе функции Javascript. Как выглядел ваш шаблон до первого { ? Существуют ли до этого незавершенные макросы или операторы VTL?   -  person matt b    schedule 15.04.2011
comment
Обновил мой ответ, но все комментарии к нему как-то исчезли.   -  person Vladislav Rastrusny    schedule 15.04.2011
comment
ИЗВИНИТЕ: Это мой плохой. Эта ошибка связана с расширением Chrome JSONView в Chrome!   -  person Andriy Drozdyuk    schedule 15.04.2011


Ответы (4)


Извините, это произошло из-за неправильного JSON, который я создавал, на что мне указало расширение браузера Chrome «JSONView». Это было потому, что мои ключи не были строками... т.е. у меня было:

 {total: 0}

но я должен был:

 {"total" : 0}
person Andriy Drozdyuk    schedule 19.04.2011

Действительно, есть лучший способ сделать это.

используйте принятый ответ здесь (Как экранировать XML с помощью Apache Velocity? ) сделать первоначальную настройку

вам также нужно будет добавить зависимость от speed-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)

person R K Punjal    schedule 21.01.2015
comment
Это ответ (если вы не работаете с неправильным форматом JSON ????). Очень хорошо работает для экранирования любых и всех токенов скорости, например. $escape.java(${проект.версия}) - person earcam; 21.11.2018

В итоге я создал константы ocb = { и ccb = } и использовал $ocb и $ccb.

Я уверен, что есть лучший способ. ;)

person Peter Lawrey    schedule 15.04.2011
comment
Действительно? Неужели этот движок настолько плох... Может быть, мне стоит отступить, пока я еще могу - person Andriy Drozdyuk; 15.04.2011
comment
ИМХО, мне кажется, это очень круто. Тем не менее, я никогда не тратил слишком много времени на чтение руководств. - person Peter Lawrey; 15.04.2011
comment
ИЗВИНИТЕ: Это мой плохой. Эта ошибка связана с расширением Chrome JSONView в Chrome! - person Andriy Drozdyuk; 15.04.2011

Вот что похоже на вашу ситуацию: http://velocity.apache.org/engine/devel/user-guide.html#escapinginvalidvtlreferences

ОБНОВЛЕНИЕ:

Попробуйте сделать это в первую очередь:

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

а затем сделайте свой текст таким:

$startbrace
    total : $listing.size()
$endbrace
person Vladislav Rastrusny    schedule 15.04.2011
comment
ИЗВИНИТЕ: Это мой плохой. Эта ошибка связана с расширением Chrome JSONView в Chrome! - person Andriy Drozdyuk; 15.04.2011