我用傑克遜生成JSON對象並將其直接寫入HTML的標籤,就像這樣:逃生斜線傑克遜
<script>
var data = $SomeJacksonWrapper.toJson($data);
</script>
此代碼休息,如果一些字符串包含在它'</script>'
。轉義正斜槓(/)可以解決問題,JSON規範也可以解決這個問題。
如何在Jackson中啓用它?
我用傑克遜生成JSON對象並將其直接寫入HTML的標籤,就像這樣:逃生斜線傑克遜
<script>
var data = $SomeJacksonWrapper.toJson($data);
</script>
此代碼休息,如果一些字符串包含在它'</script>'
。轉義正斜槓(/)可以解決問題,JSON規範也可以解決這個問題。
如何在Jackson中啓用它?
除了其他建議,傑克遜1.8還具有「character escapes」功能,它允許重新定義轉義規則。缺少文檔,但基本上需要實現CharacterEscapes
(請參閱http://jackson.codehaus.org/1.8.2/javadoc/org/codehaus/jackson/io/CharacterEscape),向JsonFactory(或直接JsonGenerator)註冊,然後根據所需的任何規則進行轉義。在這種情況下,您可以更改'/'的設置以使用ESCAPE_STANDARD。
此外,您還可以添加功能請求以添加簡單的開/關功能,因爲此特定的東西聽起來可能對其他人也有用。但據我所知,尚未具體要求。
使用StaxMan的答案,我結束了下面的代碼:
public class CustomCharacterEscapes extends CharacterEscapes {
private static final Logger log = Logger.getLogger(CustomCharacterEscapes.class);
private final int[] _asciiEscapes;
public CustomCharacterEscapes() {
_asciiEscapes = standardAsciiEscapesForJSON();
_asciiEscapes['/'] = CharacterEscapes.ESCAPE_STANDARD;
}
@Override
public int[] getEscapeCodesForAscii() {
return _asciiEscapes;
}
@Override
public SerializableString getEscapeSequence(int i) {
return null;
}
}
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
this.getJsonFactory().setCharacterEscapes(new CustomCharacterEscapes());
}
}
感謝StaxMan和Infeligo的答案在這裏(歡呼傢伙),我找到了一種方法來提供轉義/匹配(IMHO可怕)WCF DataContractJsonSerializer日期標準格式:
/Date(1328053610008+1100)/
這需要/用反斜槓導致跨線以下轉義:
\/Date(1328053610008+1100)\/
萬一它可以幫助別人,這裏是我CustomCharacterEscapes代碼,我用:
public class CustomCharacterEscapes extends CharacterEscapes {
private final int[] _asciiEscapes;
public CustomCharacterEscapes() {
_asciiEscapes = standardAsciiEscapesForJSON();
_asciiEscapes['/'] = CharacterEscapes.ESCAPE_CUSTOM;
}
@Override
public int[] getEscapeCodesForAscii() {
return _asciiEscapes;
}
@Override
public SerializableString getEscapeSequence(int i) {
if(i == '/'){
return new SerializableString() {
@Override
public String getValue() {
return "\\/";
}
@Override
public int charLength() {
return 2;
}
@Override
public char[] asQuotedChars() {
return new char[]{'\\','/'};
}
@Override
public byte[] asUnquotedUTF8() {
return new byte[]{'\\','/'};
}
@Override
public byte[] asQuotedUTF8() {
return new byte[]{'\\','/'};
}
};
}
else{
return null;
}
}
}
這有幫助。謝謝! – dmon
你能不能做逸出$的數據? –
查看http://stackoverflow.com/questions/5006185/how-to-html-escape-values-by-jackson-generator – bstick12