diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java index 130245d5bb98..3a48830dfec0 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java @@ -52,7 +52,7 @@ public List parseList(String json) { private List parseListInternal(int nesting, String json) { List list = new ArrayList<>(); - json = trimLeadingCharacter(trimTrailingCharacter(json, ']'), '[').trim(); + json = trimEdges(json, '[', ']').trim(); for (String value : tokenize(json)) { list.add(parseInternal(nesting + 1, value)); } @@ -70,37 +70,39 @@ private Object parseInternal(int nesting, String json) { return parseMapInternal(nesting + 1, json); } if (json.startsWith("\"")) { - return trimTrailingCharacter(trimLeadingCharacter(json, '"'), '"'); + return trimEdges(json, '"', '"'); } - try { - return Long.valueOf(json); - } - catch (NumberFormatException ex) { - // ignore - } - try { - return Double.valueOf(json); - } - catch (NumberFormatException ex) { - // ignore - } - return json; + return parseNumber(json); } private Map parseMapInternal(int nesting, String json) { Map map = new LinkedHashMap<>(); - json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{').trim(); + json = trimEdges(json, '{', '}').trim(); for (String pair : tokenize(json)) { String[] values = StringUtils.trimArrayElements(StringUtils.split(pair, ":")); Assert.state(values[0].startsWith("\"") && values[0].endsWith("\""), "Expecting double-quotes around field names"); - String key = trimLeadingCharacter(trimTrailingCharacter(values[0], '"'), '"'); + String key = trimEdges(values[0], '"', '"'); Object value = parseInternal(nesting, values[1]); map.put(key, value); } return map; } + private Object parseNumber(String json) { + try { + return Long.valueOf(json); + } + catch (NumberFormatException e) { + try { + return Double.valueOf(json); + } + catch (NumberFormatException ex) { + return json; + } + } + } + private static String trimTrailingCharacter(String string, char c) { if (!string.isEmpty() && string.charAt(string.length() - 1) == c) { return string.substring(0, string.length() - 1); @@ -115,6 +117,10 @@ private static String trimLeadingCharacter(String string, char c) { return string; } + private static String trimEdges(String string, char leadingChar, char trailingChar) { + return trimTrailingCharacter(trimLeadingCharacter(string, leadingChar), trailingChar); + } + private List tokenize(String json) { List list = new ArrayList<>(); int index = 0;