【问题标题】:How to avoid Jackson escaping double quotes in Java?如何避免杰克逊在 Java 中转义双引号?
【发布时间】:2020-10-22 20:44:14
【问题描述】:

我正在做一个项目,并想使用 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

【问题讨论】:

    标签: java json jackson gson


    【解决方案1】:

    问题是您在将 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);
    

    它会按您的预期工作。

    【讨论】:

    • 感谢您发布解决方案。无论如何,在我更新代码之后它仍然失败,因为 json 现在看起来像这样:: { "identifierVal":1234, "version":"two","namesList":"[ test ]"} 。简明扼要。双引号包裹在 [] 周围,而不是实际的字符串 test
    • @SantosshKumhar 那是因为您的列表中有另一个不合适的toString()。您没有向节点添加列表,而是添加了字符串。
    • 如何将列表添加到 namesNode.add();?还是您的意思是将列表的每个项目添加到arrayNode?​​span>
    • 知道了。我将列表的每个项目添加到arrayNode。谢谢你的帮助!!
    猜你喜欢
    • 2013-11-21
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多