2011-01-12 14 views
9

私はJacksonがシリアル化中に自動的に特殊文字をエスケープすると仮定しています。つまり、 "/ path /"を "\/path \ /"としてシリアライズします。ケースではないと思わ - 少なくとも1.6で、箱から出し:ジャクソンJSONは特殊な文字をエスケープしますか?

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

...失敗した - 生成される出力は、「/パス/」です。私は自分自身のシリアライザを書かなければならないのでしょうか、それともジャクソンで特殊な文字をエスケープする方法がありますか?

おかげで、 -nikita

+0

virguleはJSON文字列の特殊文字ですか? – Joey

+0

'/'はJSONを無効にしていますか? – skaffman

+0

実際には、 "/"をエスケープする必要があるかどうかが良い質問です。私はこのTwillioの文書を見て、そう思った: http://www.twilio.com/docs/api/2010-04-01/rest/response#response-formats-list-paging-information しかしJSLint ain '不平を言う。 TwilioがJSONレスポンスで "/"をエスケープするのはなぜですか? – Nikita

答えて

4

ジャクソンは唯一の必須のものをエスケープします。 "/"はあなたが逃げなければならないものではないので、そうではありません。これはJSON仕様に準拠しています。

ここで、絶対にエスケープしたい場合は、メソッドを使用して "生の"コンテンツまたは値を書き込むことができます(ジャクソンは何も処理せず、出力に文字列をダンプします)。

本当にこのようなエスケープが必要ですか?私はいくつかのジェネレータがそれをエスケープすることを知っています(理由はわかりません)が、パーザはそれを期待していませんので、スラッシュをエスケープしないで残しておきましょう。明らかにエスケープされなければならないバックスラッシュとは異なります。

1

特別な意味を持たないため、スラッシュ「/」はJSONでエスケープする必要はありません。ただし、JSON は、スラッシュをエスケープできる理由は次のとおりです。

HTMLテキストの< SCRIPT>要素にJSONテキストを直接ダンプする場合は、2文字のシーケンス「< /」がテキストに含まれていないことを確認する必要があります。そのシーケンスは、HTMLルールに従ってスクリプト要素を直ちに終了させる。しかし、JSONテキストに "< \ /"と書かれている場合、これはJSONと同じ意味を持ち、HTMLルールとは干渉しません。その結果、一部のJSONジェネレータはスラッシュをエスケープします。スラッシュが先行する場合はスラッシュを省略します。

あなたの質問への直接的な答え(ジャクソンで絶対にエスケープする方法)はわかりません。

0

一部のブラウザではツールチップの場合、改行文字は機能しません。 働いていません\ rを\ nはない作業や、\ nは

が使用ダブルバックスラッシュ文字

ソリューションスキップするように機能していません: '\ rをする\ nを' の代わりに使用 '\\ R \\ N' を、
あなたの問題を解決します。

関連する問題