package rabbitescape.ui.swing;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GitHubJsonTools
{
public static String getStringValue( String json, String key )
{
Pattern p = Pattern.compile( "\"" + key
+ "\":\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"" );
Matcher m = p.matcher( json );
m.find();
return m.group( 1 );
}
public static int getIntValue( String json, String key )
{
Pattern p = Pattern.compile( "\"" + key + "\":([0-9]+)" );
Matcher m = p.matcher( json );
m.find();
return Integer.parseInt( m.group( 1 ) );
}
/**
* @return The JSON string inside the []
*/
public static String getArrayString( String json, String key )
{
Pattern p = Pattern.compile( "\"" + key + "\":\\[(.*?)\\]" );
Matcher m = p.matcher( json );
m.find();
return m.group( 1 );
}
/**
* @param key
* Something of the form array_name.member_name. If something of
* the form member_name is used, the whole string will be
* searched.
*
* "thing1":"stuff" "thing2_array:[ { "subthing1":"more stuff" }
* { "subthing1":"even more" } ]
*
* Using a key of "thing2_array.subthing1" will return [
* "more stuff", "even more"].
*/
public static String[] getStringValuesFromArrayOfObjects(
String json,
String key )
{
String[] keyParts = key.split( "\\." );
String memberName;
String arrayString;
if ( 2 == keyParts.length )
{ // array_name.member_name
arrayString = getArrayString( json, keyParts[0] );
memberName = keyParts[1];
}
else
{ // member_name only
arrayString = json;
memberName = key;
}
Pattern p = Pattern.compile( "\"" + memberName + "\":\"(.*?)\"" );
Matcher m = p.matcher( arrayString );
ArrayList<String> ret = new ArrayList<String>();
while ( m.find() )
{
ret.add( m.group( 1 ) );
}
String[] values = new String[ret.size()];
return ret.toArray( values );
}
}