2017-06-21 79 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.比赛。