当前位置: 首页 > 知识库问答 >
问题:

Jackson ObjectMapper writeValueAsBytes方法向已包含反斜杠的字符串添加另一个反斜杠

南门嘉
2023-03-14

使用Jacksons的ObjectMapper,如果我尝试将已经包含反斜杠的字符串转换为字节数组,然后将该字节数组更改回字符串,则输出包含一个额外的反斜杠。以下代码显示了该问题

public static void main(String[] args) throws JsonProcessingException, UnsupportedEncodingException {
    ObjectMapper mapper = new ObjectMapper();
    Map<String, String> data = new HashMap<>();
    data.put("id", "Test\\String");

    //output: data[id] that has single backslash: Test\String
    System.out.println("data[id] that has single backslash: " + data.get("id"));

    byte[] dataInBytes = mapper.writeValueAsBytes(data);
    //output: data in bytes that contains double backslash: {"id":"Test\\String"}
    System.out.println("data in bytes that contains double backslash: " + new String(dataInBytes, "UTF-8"));
}

有没有办法配置ObjectMapper,使mapper#writeValueAsBytes方法不会将字符串Test\string更改为Test\\string?有没有其他方法可以使用Jackson/ObjectMapper来实现这一点?

提前感谢!!

共有1个答案

班宏毅
2023-03-14

这是有效的行为。输出已转义反斜杠。在JSON中,必须转义反斜杠。

换句话说,{"id":"Test\String"}不是有效的JSON。

检查其他必须在JSON中转义的字符。

 类似资料:
  • 问题内容: 我需要在路径字符串中替换为,但是以下代码失败。 有什么有用的建议吗? 问题答案: 使用函数filepath.ToSlash将操作系统路径分隔符替换为路径中的“ /”。 在Windows上,函数返回。在其他操作系统上,该函数按原样返回path参数。

  • 问题内容: 我该怎么做反斜杠的字符串替换。 输入源字符串: 在上面的字符串中,我想用“ /”替换“ \ /”; 更换后的预期产量: 我从第三方获得源字符串,因此可以控制字符串的格式。 这就是我尝试过的 试用1: 异常靠近索引1的意外内部错误\ 试用2: 无异常,但不执行必需的替换。什么都不做。 试用3: 无异常,但不执行必需的替换。什么都不做。 问题答案: 是不可变的-您在其上调用的每个方法都不会

  • 我调用一个Web服务来获取JSON字符串响应,它包含的反斜杠不是原始字符串。下面是我请求JSON字符串对象的代码,它是:{“name”:“name”,“id”:1} 在后执行中,我只是尝试将这个resush字符串解析为JSONObject。 Rsponse字符串是:“{\'name\':\'name\',\'id\':1}”,当我试图将其解析为JSONObject时,它会抛出一个异常:org。js

  • 问题内容: 这是一个“到底发生了什么”的问题。我实际上不需要解决方案。 我必须用双反斜杠替换字符串中的所有单反斜杠。这就是我最终要做的… …其中strRootDirectory是上面的java.lang.String。 现在,我了解了第一个参数的四个反斜杠:regex期望两个反斜杠以表示单个文字反斜杠,而Java希望它们加倍。没关系。 但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不是应该

  • Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,例如:如果你想要用星号加在文字旁边的方式来做出强调效果(但不用 <em> 标签),你可以在星号的前面加上反斜杠: \*literal asterisks\* Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号: \ 反斜线 ` 反引号 * 星号 _ 底线 {} 花括号 [] 方括号 () 括