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

eqqqjvef  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(372)

我正在做一个项目,想用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正在转义双引号。但是有没有办法避免转义双引号和添加前导和尾随双引号呢?
任何帮助都是感激不尽的。顺便说一句,我按照下面的链接:
Why ObjectNode adds backslash in in Json String
Jackson adds backslash in json

rqcrx0a6

rqcrx0a61#

问题是在将JSON对象传递给objectMapper之前,您需要通过toString()方法将其转换为String。

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);

它将按您预期方式工作。

相关问题