2017-06-21 106 views
2

我有一個json,其中包含大括號作爲字符串字段之一的值。我們正在使用fasterxml.jackson api來解析json並運行錯誤。當json包含「}」時Json解析異常

JSON:

{ 
    "Message": { 
     "header": { 
      "correlationId": "c17da531-bf04-4cbf-9497-631353f9e8c5" 
     }, 
     "body": { 
      "log": { 
       "id": "a8e5b716-1bc0-4829-bc47-1d28b4ff8920", 
       "type": "}test" 
      } 
     } 
    } 
} 

錯誤「意外的輸入結束:期待收盤報價爲字符串值」

我怎樣才能繼續解析,即使有}的價值?

回答

0

您需要將您的json字符串轉換爲包含轉義字符。

我的工作實例

String json = "{\n" + 
       " \"Message\": {\n" + 
       "  \"header\": {\n" + 
       "   \"correlationId\": \"c17da531-bf04-4cbf-9497-631353f9e8c5\"\n" + 
       "  },\n" + 
       "  \"body\": {\n" + 
       "   \"log\": {\n" + 
       "    \"id\": \"a8e5b716-1bc0-4829-bc47-1d28b4ff8920\",\n" + 
       "    \"type\": \"}test\"\n" + 
       "   }\n" + 
       "  }\n" + 
       " }\n" + 
       "}"; 

     JsonFactory factory = new JsonFactory(); 

     ObjectMapper mapper = new ObjectMapper(factory); 
     JsonNode rootNode = mapper.readTree(json); 

     Iterator<Map.Entry<String,JsonNode>> fieldsIterator = rootNode.fields(); 
     while (fieldsIterator.hasNext()) { 

      Map.Entry<String,JsonNode> field = fieldsIterator.next(); 
      System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue()); 
     } 
0

你需要逃避你的JSON數據的}。如\}。但如果是這種情況,你不能改變JSON(可能是你從某些API中獲得它),你可以在解析之前預處理JSON字符串。像

  • 您可以使用正則表達式這個"\.*(\}).*"
  • 然後簡單地替換字符串中的Group 1.比賽。