Джексон JSON делает специальный экранирование символа? - PullRequest
9 голосов
/ 12 января 2011

Я предполагал, что Джексон автоматически экранирует специальные символы во время сериализации, то есть сериализует "/ path /" как "\ / path \ /". Похоже, что это не так - по крайней мере, из коробки с 1.6:

@Test
public void testJacksonSerialize() throws Exception
{
    ObjectMapper om = new ObjectMapper();
    assertEquals("\\/path\\/", om.writeValueAsString("/path/"));
}

... терпит неудачу - выводится "/ путь /". Должен ли я написать свой собственный сериализатор или есть способ включить экранирование специальных символов в Джексоне?

спасибо, -nikita

Ответы [ 3 ]

4 голосов
/ 13 января 2011

Джексон только избегает обязательных вещей.«/» это не то, что вы должны избежать, следовательно, это не так.Это в соответствии со спецификацией JSON.

Теперь: если вы абсолютно хотите экранировать, вы можете использовать методы для записи «необработанного» содержимого или значений (в этом случае Джексон вообще не обрабатывает и выводит строку в вывод).*

Но тебе действительно нужно такое спасение?Я знаю, что некоторые генераторы избегают его (по неизвестным мне причинам), но ни один парсер не ожидает этого, поэтому было бы хорошо оставить косые черты без экранирования.Это отличается от обратной косой черты, которая, очевидно, должна быть исключена.

1 голос
/ 09 мая 2011

Косую черту "/" не нужно экранировать в JSON, потому что она не имеет особого значения. Тем не менее, JSON позволяет слешу быть экранированным по следующей причине.

Если вы выгружаете текст JSON прямо в элемент текста HTML, необходимо убедиться, что двухсимвольная последовательность "</" не встречается в тексте. Эта последовательность немедленно заканчивает элемент скрипта в соответствии с правилами HTML. Но если текст JSON читается как «<\ /», это имеет то же значение для JSON, но не мешает правилам HTML. Следовательно, некоторые генераторы JSON избегают косой черты тогда и только тогда, когда ей предшествует знак «меньше». </p>

При этом я не знаю прямого ответа на ваш вопрос (как абсолютно избежать побега в Джексоне).

0 голосов
/ 19 апреля 2012

Символ новой строки не будет работать в случае всплывающей подсказки с некоторыми браузерами. Не работает \ r \ n Не работает или \ n Не работает

Использование двойной обратной косой черты для пропуска символов

Решение: используйте «\\ r \\ n» вместо «\ r \ n»,
это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...