如何避免 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 正在转义双引号。但是有没有办法避免转义双引号和添加前导和尾随双引号。
感谢任何帮助。顺便说一句,我点击了以下链接:
Why ObjectNode adds backslash in in Json String
问题是您在将 JSON 对象传递给 objectMapper
之前通过其 toString()
方法将其转换为字符串。改变这个:
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);
它会如您所愿地工作。
我正在做一个项目,想使用 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
问题是您在将 JSON 对象传递给 objectMapper
之前通过其 toString()
方法将其转换为字符串。改变这个:
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);
它会如您所愿地工作。