繁体   English   中英

杰克逊没有逃避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));

问题解决了。

Matcher.quoteReplacement

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM