[英]Jackson: customization escaping of double quotes while serialize an object to json
[英]Jackson not escaping quotes in JSON
我正在尝试将json放在java中的javascript文件中,但是当我将json写入字符串时,该字符串似乎不是javascript的有效json; 它缺少一些逃脱。 (这发生在json中的一个字符串中,我将其格式化为一个虚假的json。)
例如,这将是我的javascript文件中的有效json:
{
"message":
"the following books failed: [{\"book\": \"The Horse and his Boy\",\"author\": \"C.S. Lewis\"}, {\"book\": \"The Left Hand of Darkness\",\"author\": \"Ursula K. le Guin\"}, ]"
}
不过,我得到的是双引号未被转义的地方:
{
"message":
"The following books failed: [{"book": "The Horse and his Boy","author": "C.S. Lewis"}, {"book": "The Left Hand of Darkness","author": "Ursula K. le Guin"}, ]"
}
当我这样做时,我得到了第二个结果:
new ObjectMapper().writer().writeValueAsString(booksMessage);
但是当我用jackson将它直接写入文件时,我得到了第一个好结果:
new ObjectMapper().writer().writeValue(fileToWriteTo, booksMessage);
那么为什么jackson在写入文件时会以不同的方式逃避,在编写字符串时如何让它像我一样逃脱呢?
ObjectWriter
类的writeValue()
方法对输入文本进行编码。
您不需要写入文件。 获取相同字符串的另一种方法可能是:
StringWriter sw = new StringWriter();
new ObjectMapper().writer().writeValue(sw, booksMessage);
String result = sw.toString();
我补充道
booksJson = Pattern.compile("\\\\").matcher(booksJson).replaceAll("\\\\\\\\");
它逃脱了所有逃脱角色。 这样当我将它写入文件并删除转义时,我仍然有我需要的转义。 事实证明我真正的问题是如何在没有删除Java转义的情况下写入文件。
我参加派对的时间很晚,但我遇到了类似的问题,我意识到杰克逊或我的数据不是问题。 这是Java。 我正在读取JSON文件,然后尝试将其写入模板HTML文件。
我的原始JSON就像你的一行,类似于:
{"field" : "This field contains what looks like another JSON field: {\"abc\": \"value\"}"}
当我将上面的内容写入字符串时,abc和value中引号前的反斜杠消失了。 我注意到String.replaceAll的上下文帮助提到了一些关于Matcher.quoteReplacement的内容。 我离开了这个:
template = template.replaceAll("%template%", jsonDataString);
对此:
Pattern pattern = Pattern.compile("%template%");
Matcher matcher = Pattern.matcher(template);
matcher.replaceAll(matcher.quoteReplacement(jsonDataString));
问题解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.