2011-01-12 12 views
9

Zakładałem, że Jackson automatycznie ucieka przed znakami specjalnymi podczas serializacji, tj. Serializuje "/ path /" jako "\/ścieżka \ /". To wydaje się nie być przypadek - co najmniej po wyjęciu z pudełka z 1,6:Czy Jackson JSON wykonuje specjalny znak?

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

... nie - wyjście jest produkowane „/ ścieżka /”. Czy muszę napisać własny serialser lub czy istnieje sposób na umożliwienie specjalnej ucieczki w Jackson?

Dzięki, -nikita

+0

Virgule jest specjalną postacią w ciągach JSON? – Joey

+0

Czy '/' invalid JSON? – skaffman

+0

Właściwie to, czy "/" powinno się uciec, jest lepszym pytaniem. Zakładam, że patrząc na ten dokument Twillio: http://www.twilio.com/docs/api/2010-04-01/rest/response#response-formats-list-paging-information Ale JSLint ain ' narzekać. Dlaczego Twilio ucieka "/" wtedy w odpowiedziach JSON? – Nikita

Odpowiedz

4

Jackson ucieka tylko obowiązkowe rzeczy. "/" nie jest czymś, co musisz uciec, a więc nie jest. Jest to zgodne ze specyfikacją JSON.

Teraz: jeśli absolutnie chcesz uciekać, możesz użyć metod zapisywania "surowych" treści lub wartości (w takim przypadku Jackson nie przetwarza w ogóle i zrzuca String na wyjściu).

Ale czy naprawdę potrzebujesz takiego ucieczki? Wiem, że niektóre generatory unikają tego (z nieznanych mi powodów), ale żaden z parserów tego nie oczekuje, więc powinno wystarczyć, aby slash pozostał bez zmian. Różni się od ukośników, które oczywiście muszą zostać usunięte.

1

Ukośnika "/" nie trzeba zmieniać w JSON, ponieważ nie ma on specjalnego znaczenia. Jednak JSON pozwala na uniknięcie ukośnika z następującego powodu:.

Jeśli zrzucisz tekst JSON bezpośrednio do elementu tekstowego HTML> < SCRIPT>, musisz upewnić się, że sekwencja dwuznakowa "< /" nie występuje w tekście. Ta sekwencja natychmiast zakończy element skryptu zgodnie z regułami HTML. Ale jeśli tekst JSON brzmi "< \ /", to ma to samo znaczenie dla JSON, nie ingerując w reguły HTML. W konsekwencji niektóre generatory JSON wymykają się ukośnikowi wtedy i tylko wtedy, gdy poprzedza je znak mniejszy od znaku.

Mimo to, nie znam bezpośredniej odpowiedzi na twoje pytanie (jak absolutnie wykonać ucieczkę w Jackson).

0

Nowy znak linii nie działa w przypadku etykiet narzędzi w niektórych przeglądarkach. Nie działa \ r \ n lub nie działa \ n Nie działa

Zastosowanie podwójnej backslash pominąć znaki

Rozwiązanie: Użyj '\\ r \\ n' w miejsce '\ r \ n',
to rozwiąże twój problem.