Recently I came across with problem where I needed to recognize and parse custom exception message inside JSON on Java server side. For that particular problem I used Regex.
The JSON response format is like this:
And this is the code:
protected void checkException(String response) throws ApiException { String errorCode = null; String message = null; Map<String, String> properties = null; Pattern errorCodePattern = Pattern.compile("\"code\"\\s*:\\s*\"([^,]*)\","); Pattern messagePattern = Pattern.compile("\"message\"\\s*:\\s*\"([^,]*)\","); Pattern statusPattern = Pattern.compile("\"status\"\\s*:\\s*\"(FAILURE)\""); Matcher errorCodeMatcher = errorCodePattern.matcher(response); Matcher messageMatcher = messagePattern.matcher(response); Matcher statusMatcher = statusPattern.matcher(response); boolean errorCodeFlag = errorCodeMatcher.find(); boolean messageFlag = messageMatcher.find(); boolean statusFlag = statusMatcher.find(); if (errorCodeFlag && messageFlag && statusFlag) { Pattern propertiesPattern = Pattern.compile("\"properties\"\\s*:\\s*\\[(\\{[^\\]]*)"); Pattern propertiesValuePattern = Pattern.compile("\"value\"\\s*:\\s*\"([^\"]*)\""); Pattern propertiesKeyPattern = Pattern.compile("\"key\"\\s*:\\s*\"([^\"]*)\""); Matcher propertiesMatcher = propertiesPattern.matcher(response); boolean propertiesFlag = propertiesMatcher.find(); boolean keyFlag = false; boolean valueFlag = false; errorCode = errorCodeMatcher.group(1); message = messageMatcher.group(1); System.out.println("\nJSON response contains exception:\n"); System.out.println("code: " + errorCode); System.out.println("message: " + message); System.out.println("status: " + statusMatcher.group(1)); if (propertiesFlag) { properties = new HashMap<String, String>(); String propertiesData = propertiesMatcher.group(1); Matcher keyMatcher = propertiesKeyPattern.matcher(propertiesData); Matcher valueMatcher = propertiesValuePattern.matcher(propertiesData); keyFlag = keyMatcher.find(); valueFlag = valueMatcher.find(); System.out.println("properties: "); if (keyFlag && valueFlag && keyMatcher.groupCount() == valueMatcher.groupCount()) { for (int i = 1; i <= keyMatcher.groupCount(); i++) { System.out.println("key: " + keyMatcher.group(i) + " value: " + valueMatcher.group(i)); properties.put(keyMatcher.group(i), valueMatcher.group(i)); } } System.out.println(""); } throw new ApiException(errorCode, message, properties); } }The output:
No comments:
Post a Comment