簡體   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