Skip to content

Commit fe79b20

Browse files
committed
Merge pull request #41876 from hyunmin0317
* pr/41876: Polish "Refactor BasicJsonParser to simplify JSON parsing logic" Refactor BasicJsonParser to simplify JSON parsing logic Closes gh-41876
2 parents 5ee5225 + 66a41db commit fe79b20

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/BasicJsonParser.java

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public List<Object> parseList(String json) {
5252

5353
private List<Object> parseListInternal(int nesting, String json) {
5454
List<Object> list = new ArrayList<>();
55-
json = trimLeadingCharacter(trimTrailingCharacter(json, ']'), '[').trim();
55+
json = trimEdges(json, '[', ']').trim();
5656
for (String value : tokenize(json)) {
5757
list.add(parseInternal(nesting + 1, value));
5858
}
@@ -70,37 +70,39 @@ private Object parseInternal(int nesting, String json) {
7070
return parseMapInternal(nesting + 1, json);
7171
}
7272
if (json.startsWith("\"")) {
73-
return trimTrailingCharacter(trimLeadingCharacter(json, '"'), '"');
73+
return trimEdges(json, '"', '"');
7474
}
75-
try {
76-
return Long.valueOf(json);
77-
}
78-
catch (NumberFormatException ex) {
79-
// ignore
80-
}
81-
try {
82-
return Double.valueOf(json);
83-
}
84-
catch (NumberFormatException ex) {
85-
// ignore
86-
}
87-
return json;
75+
return parseNumber(json);
8876
}
8977

9078
private Map<String, Object> parseMapInternal(int nesting, String json) {
9179
Map<String, Object> map = new LinkedHashMap<>();
92-
json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{').trim();
80+
json = trimEdges(json, '{', '}').trim();
9381
for (String pair : tokenize(json)) {
9482
String[] values = StringUtils.trimArrayElements(StringUtils.split(pair, ":"));
9583
Assert.state(values[0].startsWith("\"") && values[0].endsWith("\""),
9684
"Expecting double-quotes around field names");
97-
String key = trimLeadingCharacter(trimTrailingCharacter(values[0], '"'), '"');
85+
String key = trimEdges(values[0], '"', '"');
9886
Object value = parseInternal(nesting, values[1]);
9987
map.put(key, value);
10088
}
10189
return map;
10290
}
10391

92+
private Object parseNumber(String json) {
93+
try {
94+
return Long.valueOf(json);
95+
}
96+
catch (NumberFormatException ex) {
97+
try {
98+
return Double.valueOf(json);
99+
}
100+
catch (NumberFormatException ex2) {
101+
return json;
102+
}
103+
}
104+
}
105+
104106
private static String trimTrailingCharacter(String string, char c) {
105107
if (!string.isEmpty() && string.charAt(string.length() - 1) == c) {
106108
return string.substring(0, string.length() - 1);
@@ -115,6 +117,10 @@ private static String trimLeadingCharacter(String string, char c) {
115117
return string;
116118
}
117119

120+
private static String trimEdges(String string, char leadingChar, char trailingChar) {
121+
return trimTrailingCharacter(trimLeadingCharacter(string, leadingChar), trailingChar);
122+
}
123+
118124
private List<String> tokenize(String json) {
119125
List<String> list = new ArrayList<>();
120126
int index = 0;

0 commit comments

Comments
 (0)