@ -52,7 +52,7 @@ public class BasicJsonParser extends AbstractJsonParser {
@@ -52,7 +52,7 @@ public class BasicJsonParser extends AbstractJsonParser {
private List < Object > parseListInternal ( int nesting , String json ) {
List < Object > 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 @@ public class BasicJsonParser extends AbstractJsonParser {
@@ -70,37 +70,39 @@ public class BasicJsonParser extends AbstractJsonParser {
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 < String , Object > parseMapInternal ( int nesting , String json ) {
Map < String , Object > 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 ex ) {
try {
return Double . valueOf ( json ) ;
}
catch ( NumberFormatException ex2 ) {
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 @@ public class BasicJsonParser extends AbstractJsonParser {
@@ -115,6 +117,10 @@ public class BasicJsonParser extends AbstractJsonParser {
return string ;
}
private static String trimEdges ( String string , char leadingChar , char trailingChar ) {
return trimTrailingCharacter ( trimLeadingCharacter ( string , leadingChar ) , trailingChar ) ;
}
private List < String > tokenize ( String json ) {
List < String > list = new ArrayList < > ( ) ;
int index = 0 ;