繁体   English   中英

如何避免Jackson在Java中转义双引号?

[英]How to avoid Jackson escaping double quotes in Java?

我正在做一个项目,想使用 ObjectMapper 将一些用 Gson 编写的代码重写为 Jackson。 所以我试图使用一些属性创建一个 JSON 字符串,如下所示:

ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objNode= objectMapper.createObjectNode();
objNode.put("identifierVal", UUID.randomUUID().toString());
objNode.put("version", "two");
List<String> namesList= new ArrayList<>();
namesList.add("test");
objNode.put("namesList", namesList.toString());
String requestObject = objectMapper.writeValueAsString(objNode.toString());

预期结果:

{
   "identifierVal":1234,
   "version":"two",
   "namesList":[
      "test"
   ]
}

实际的:

"{  
        "\identifierVal\": 1234,   
        "\version\":"\two\",
"\namesList\": ["\test\"]

    }"

因此,一旦我使用 Jackson 创建了一个 JSON 字符串,它就会转义字段名称和值的双引号,并在前导和尾随空格处添加一个\\ 所以服务调用由于逃逸而失败。

我已经阅读了一些文档,我可以理解 Jackson 正在转义双引号。 但是有没有办法避免转义双引号并添加前导和尾随双引号。

任何帮助表示赞赏。 顺便说一句,我按照以下链接操作:

为什么 ObjectNode 在 Json 字符串中添加反斜杠

Jackson 在 json 中添加反斜杠

问题是您在将 JSON 对象传递给objectMapper之前通过其toString()方法将其转换为objectMapper 改变这个:

String requestObject = objectMapper.writeValueAsString(objNode.toString());

对此:

String requestObject = objectMapper.writeValueAsString(objNode);

您还需要对此进行更改:

List<String> namesList= new ArrayList<>();
namesList.add("test");
objNode.put("namesList", namesList.toString());

对此:

ArrayNode namesNode = objNode.arrayNode();
namesNode.add("test");
objNode.set("namesList", namesNode);

它会按您的预期工作。

暂无
暂无

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

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