@@ -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