commit
						7fbb79b7f6
					
				|  | @ -52,7 +52,7 @@ public class BasicJsonParser extends AbstractJsonParser { | ||||||
| 
 | 
 | ||||||
| 	private List<Object> parseListInternal(int nesting, String json) { | 	private List<Object> parseListInternal(int nesting, String json) { | ||||||
| 		List<Object> list = new ArrayList<>(); | 		List<Object> list = new ArrayList<>(); | ||||||
| 		json = trimLeadingCharacter(trimTrailingCharacter(json, ']'), '[').trim(); | 		json = trimEdges(json, '[', ']').trim(); | ||||||
| 		for (String value : tokenize(json)) { | 		for (String value : tokenize(json)) { | ||||||
| 			list.add(parseInternal(nesting + 1, value)); | 			list.add(parseInternal(nesting + 1, value)); | ||||||
| 		} | 		} | ||||||
|  | @ -70,37 +70,39 @@ public class BasicJsonParser extends AbstractJsonParser { | ||||||
| 			return parseMapInternal(nesting + 1, json); | 			return parseMapInternal(nesting + 1, json); | ||||||
| 		} | 		} | ||||||
| 		if (json.startsWith("\"")) { | 		if (json.startsWith("\"")) { | ||||||
| 			return trimTrailingCharacter(trimLeadingCharacter(json, '"'), '"'); | 			return trimEdges(json, '"', '"'); | ||||||
| 		} | 		} | ||||||
| 		try { | 		return parseNumber(json); | ||||||
| 			return Long.valueOf(json); |  | ||||||
| 		} |  | ||||||
| 		catch (NumberFormatException ex) { |  | ||||||
| 			// ignore |  | ||||||
| 		} |  | ||||||
| 		try { |  | ||||||
| 			return Double.valueOf(json); |  | ||||||
| 		} |  | ||||||
| 		catch (NumberFormatException ex) { |  | ||||||
| 			// ignore |  | ||||||
| 		} |  | ||||||
| 		return json; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private Map<String, Object> parseMapInternal(int nesting, String json) { | 	private Map<String, Object> parseMapInternal(int nesting, String json) { | ||||||
| 		Map<String, Object> map = new LinkedHashMap<>(); | 		Map<String, Object> map = new LinkedHashMap<>(); | ||||||
| 		json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{').trim(); | 		json = trimEdges(json, '{', '}').trim(); | ||||||
| 		for (String pair : tokenize(json)) { | 		for (String pair : tokenize(json)) { | ||||||
| 			String[] values = StringUtils.trimArrayElements(StringUtils.split(pair, ":")); | 			String[] values = StringUtils.trimArrayElements(StringUtils.split(pair, ":")); | ||||||
| 			Assert.state(values[0].startsWith("\"") && values[0].endsWith("\""), | 			Assert.state(values[0].startsWith("\"") && values[0].endsWith("\""), | ||||||
| 					"Expecting double-quotes around field names"); | 					"Expecting double-quotes around field names"); | ||||||
| 			String key = trimLeadingCharacter(trimTrailingCharacter(values[0], '"'), '"'); | 			String key = trimEdges(values[0], '"', '"'); | ||||||
| 			Object value = parseInternal(nesting, values[1]); | 			Object value = parseInternal(nesting, values[1]); | ||||||
| 			map.put(key, value); | 			map.put(key, value); | ||||||
| 		} | 		} | ||||||
| 		return map; | 		return map; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	private Object parseNumber(String json) { | ||||||
|  | 		try { | ||||||
|  | 			return Long.valueOf(json); | ||||||
|  | 		} | ||||||
|  | 		catch (NumberFormatException ex) { | ||||||
|  | 			try { | ||||||
|  | 				return Double.valueOf(json); | ||||||
|  | 			} | ||||||
|  | 			catch (NumberFormatException ex2) { | ||||||
|  | 				return json; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	private static String trimTrailingCharacter(String string, char c) { | 	private static String trimTrailingCharacter(String string, char c) { | ||||||
| 		if (!string.isEmpty() && string.charAt(string.length() - 1) == c) { | 		if (!string.isEmpty() && string.charAt(string.length() - 1) == c) { | ||||||
| 			return string.substring(0, string.length() - 1); | 			return string.substring(0, string.length() - 1); | ||||||
|  | @ -115,6 +117,10 @@ public class BasicJsonParser extends AbstractJsonParser { | ||||||
| 		return string; | 		return string; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	private static String trimEdges(String string, char leadingChar, char trailingChar) { | ||||||
|  | 		return trimTrailingCharacter(trimLeadingCharacter(string, leadingChar), trailingChar); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	private List<String> tokenize(String json) { | 	private List<String> tokenize(String json) { | ||||||
| 		List<String> list = new ArrayList<>(); | 		List<String> list = new ArrayList<>(); | ||||||
| 		int index = 0; | 		int index = 0; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue