如何避免Jackson在Java中转义双引号 [英] How to avoid Jackson escaping double quotes in Java

查看:1401
本文介绍了如何避免Jackson在Java中转义双引号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在一个项目上,想重写一些用Gson编写的代码给Jackson.因此,我尝试使用以下一些属性来创建Json字符串:

I am working on a project and wanted to rewrite some code written in Gson to Jackson. So I am trying to create a Json string using some properties as below:

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\"]

    }"

因此,一旦我使用杰克逊创建了Json字符串,事实证明,它会转义属性名称和值的双引号,并在开头和结尾添加双引号.因此,因此在调用服务时失败.

So once I create a Json String using jackson,it turns out it is escaping double quotes for property names and values and adding a double quote at beginning and end. So because of this it is failing when calling a service.

我已经阅读了一些文档,并且我可以理解杰克逊正在转义双引号.但是有一种方法可以避免转义双引号以及添加前导和尾随双引号.

I have went through some documentation and I can understand Jackson is escaping double quotes. But is there a way to avoid escaping double quotes and adding of leading and trailing double quotes.

感谢您的帮助.顺便说一句,我浏览了此链接,并寻找适当且更好的解决方案.

Any help is appreciated. BTW, I went through this links and looking for a proper and better solution.

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

Jackson在json中添加反斜杠

推荐答案

问题是您正在将JSON对象通过其toString()方法转换为字符串,然后再将其传递给objectMapper.更改此:

The problem is you are converting your JSON object to a String via its toString() method before passing it to the objectMapper. Change this:

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

它会按预期工作.

这篇关于如何避免Jackson在Java中转义双引号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆