Example usage for com.google.gson.stream JsonReader endObject

List of usage examples for com.google.gson.stream JsonReader endObject

Introduction

In this page you can find the example usage for com.google.gson.stream JsonReader endObject.

Prototype

public void endObject() throws IOException 

Source Link

Document

Consumes the next token from the JSON stream and asserts that it is the end of the current object.

Usage

From source file:com.flowzr.budget.holo.export.flowzr.FlowzrSyncEngine.java

License:Open Source License

public static <T> int readMessage(JsonReader reader, String tableName, Class<T> clazz, long last_sync_ts)
        throws IOException, JSONException, Exception {
    String n = null;/*  ww w.j a  va  2s. c  o  m*/
    int i = 0;

    while (reader.hasNext()) {
        JsonToken peek = reader.peek();

        String v = null;
        if (peek == JsonToken.BEGIN_OBJECT) {
            reader.beginObject();
        } else if (peek == JsonToken.NAME) {
            n = reader.nextName();
        } else if (peek == JsonToken.BEGIN_ARRAY) {
            if (n.equals(tableName)) {
                i = readJsnArr(reader, tableName, clazz);

            } else {
                if (n.equals("params")) {
                    reader.beginArray();
                    if (reader.hasNext()) {
                        reader.beginObject();
                        if (reader.hasNext()) {
                            n = reader.nextName();
                            v = reader.nextString();
                        }
                        reader.endObject();
                    }
                    reader.endArray();
                } else {
                    reader.skipValue();
                }
            }
        } else if (peek == JsonToken.END_OBJECT) {
            reader.endObject();
        } else if (peek == JsonToken.END_ARRAY) {
            reader.endArray();
        } else if (peek == JsonToken.STRING) {
            reader.skipValue();
        } else {
            reader.skipValue();
        }
    }
    return i;
}

From source file:com.flowzr.budget.holo.export.flowzr.FlowzrSyncEngine.java

License:Open Source License

public static <T> int readJsnArr(JsonReader reader, String tableName, Class<T> clazz)
        throws IOException, JSONException, Exception {
    JSONObject o = new JSONObject();
    JsonToken peek = reader.peek();/*from  www. j a v a  2s  .co  m*/
    String n = null;
    reader.beginArray();
    int j = 0;
    int i = 0;
    while (reader.hasNext()) {
        peek = reader.peek();
        if (reader.peek() == JsonToken.BEGIN_OBJECT) {
            reader.beginObject();
        } else if (reader.peek() == JsonToken.END_OBJECT) {
            reader.endObject();
        }
        o = new JSONObject();
        while (reader.hasNext()) {
            peek = reader.peek();
            if (peek == JsonToken.NAME) {
                n = reader.nextName();
            } else if (peek == JsonToken.BEGIN_OBJECT) {
                reader.beginObject();
            } else if (peek == JsonToken.END_OBJECT) {
                reader.endObject();
            } else if (peek == JsonToken.BOOLEAN) {
                try {
                    o.put(n, reader.nextBoolean());
                } catch (JSONException e) {

                    e.printStackTrace();
                }
            } else if (peek == JsonToken.STRING) {
                try {
                    o.put(n, reader.nextString());

                } catch (JSONException e) {

                    e.printStackTrace();
                }
            } else if (peek == JsonToken.NUMBER) {
                try {
                    o.put(n, reader.nextDouble());

                } catch (JSONException e) {

                    e.printStackTrace();
                }
            }
        }
        reader.endObject();
        if (o.has("key")) {
            i = i + 1;
            j = j + 1;
            if (j % 100 == 0) {
                j = 2;
            }
            saveEntityFromJson(o, tableName, clazz, i);
            if (i % 10 == 0) {
                //notifyUser(context.getString(R.string.flowzr_sync_receiving) + " " + tableName + ". " + context.getString(R.string.hint_run_background), (int)(Math.round(j)));
            }
        }
    }
    reader.endArray();
    return i;
}

From source file:com.flowzr.budget.holo.export.flowzr.FlowzrSyncEngine.java

License:Open Source License

public static void readDelete(JsonReader reader) throws IOException {
    reader.nextName();/*from w ww.ja v a 2s .  c  o m*/
    reader.beginArray();
    while (reader.hasNext()) {
        reader.beginObject();
        reader.nextName(); //tablename
        String t = reader.nextString();
        reader.nextName(); //key
        execDelete(t, reader.nextString());
        reader.endObject();
    }
    reader.endArray();
}

From source file:com.flowzr.export.flowzr.FlowzrSyncEngine.java

License:Open Source License

public static void readDelete(JsonReader reader) throws IOException {
    reader.nextName();//from   w ww. j  av  a 2s .  c  om
    reader.beginArray();
    while (reader.hasNext()) {
        reader.beginObject();
        reader.nextName(); //tablename
        String t = reader.nextString();
        reader.nextName(); //key                
        execDelete(t, reader.nextString());
        reader.endObject();
    }
    reader.endArray();
}

From source file:com.funambol.android.activities.AndroidHomeScreen.java

License:Open Source License

/**
 * json//  w  w w.  j a va  2  s.c  o  m
 * @param in
 * @throws IOException
 */
public void processJsonStream(InputStream in) throws IOException {
    JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
    reader.beginObject();
    boolean result = false;
    int contactsCount = 0; //
    int smsCount = 0; //
    long smsLastBakTime = 0; //

    while (reader.hasNext()) {
        String name = reader.nextName();
        if ("result".equals(name)) {
            result = "ok".equals(reader.nextString());
        } else if ("contacts_count".equals(name)) {
            contactsCount = Integer.valueOf(reader.nextString());
        } else if ("sms_count".equals(name)) {
            smsCount = Integer.valueOf(reader.nextString());
        } else if ("sms_last_baktime".equals(name)) {
            try {
                smsLastBakTime = Long.valueOf(reader.nextString());
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        } else {
            reader.skipValue();
        }
    }

    reader.endObject();

    if (result) {
        //prefStore
        prefStore.setSmsCountInServer(this, smsCount);
        prefStore.setContactsCountInServer(this, contactsCount);

        //
        overviewInfoHandler.sendEmptyMessage(MSG_REFRESH_OVERVIEW_INFO);

        //0
        if (0 == contactsCount) {
            contactsImportHandler.sendEmptyMessage(0);
            Log.debug("shawnqiu", "homeScreen : processJsonStream : showContactsImporter");
        }
    }

}

From source file:com.gelakinetic.mtgfam.helpers.JsonParser.java

License:Open Source License

public void readCardJsonStream(InputStream in, CardProgressReporter progReport, String setName,
        CardDbAdapter mDbHelper, Context context) throws IOException {
    String dialogText = String.format(context.getString(R.string.update_parse_cards), setName);

    JsonReader reader = new JsonReader(new InputStreamReader(in, "ISO-8859-1"));
    String s, s1, s2, ptstr;// ww  w .  j av  a2  s .  c o m

    int numTotalElements = 0;
    int elementsParsed = 0;

    reader.beginObject();
    s = reader.nextName();

    ArrayList<MtgSet> setsAdded = new ArrayList<MtgSet>();

    progReport.reportJsonCardProgress("determinate", "");
    reader.beginObject();
    while (reader.hasNext()) {

        s = reader.nextName();
        if (s.equalsIgnoreCase("v")) { // bdd_date
            reader.skipValue();
        }
        if (s.equalsIgnoreCase("u")) { // bdd_version
            reader.skipValue();
        }
        if (s.equalsIgnoreCase("s")) { // sets
            reader.beginObject();
            while (reader.hasNext()) {
                s1 = reader.nextName();
                if (s1.equalsIgnoreCase("b")) { // set
                    MtgSet set;

                    JsonToken jt = reader.peek();
                    if (jt.equals(JsonToken.BEGIN_OBJECT)) {
                        set = new MtgSet();
                        reader.beginObject();
                        while (reader.hasNext()) {
                            s2 = reader.nextName();
                            if (s2.equalsIgnoreCase("a")) { // name
                                set.name = reader.nextString();
                            }
                            if (s2.equalsIgnoreCase("r")) { // code_magiccards
                                set.code_magiccards = reader.nextString();
                            }
                            if (s2.equalsIgnoreCase("q")) { // code
                                set.code = reader.nextString();
                            }
                            if (s2.equalsIgnoreCase("y")) { // date
                                set.date = reader.nextLong();
                            }
                        }
                        setsAdded.add(set);
                        reader.endObject();
                    } else if (jt.equals(JsonToken.BEGIN_ARRAY)) {
                        reader.beginArray();
                        while (reader.hasNext()) {
                            set = new MtgSet();
                            reader.beginObject();
                            while (reader.hasNext()) {
                                s2 = reader.nextName();
                                if (s2.equalsIgnoreCase("a")) { // name
                                    set.name = reader.nextString();
                                }
                                if (s2.equalsIgnoreCase("r")) { // code_magiccards
                                    set.code_magiccards = reader.nextString();
                                }
                                if (s2.equalsIgnoreCase("q")) { // code
                                    set.code = reader.nextString();
                                }
                                if (s2.equalsIgnoreCase("y")) { // date
                                    set.date = reader.nextLong();
                                }
                            }
                            setsAdded.add(set);
                            reader.endObject();
                        }
                        reader.endArray();
                    }
                }
            }
            reader.endObject();
        }
        if (s.equalsIgnoreCase("p")) { // cards

            reader.beginObject();
            while (reader.hasNext()) {
                s1 = reader.nextName();
                if (s1.equalsIgnoreCase("o")) { // card
                    MtgCard c;
                    reader.beginArray();
                    while (reader.hasNext()) {

                        reader.beginObject();
                        c = new MtgCard();
                        while (reader.hasNext()) {
                            s2 = reader.nextName();
                            if (s2.equalsIgnoreCase("a")) { // name
                                c.name = reader.nextString();
                            } else if (s2.equalsIgnoreCase("b")) { // set
                                c.set = reader.nextString();
                            } else if (s2.equalsIgnoreCase("c")) { // type
                                c.type = reader.nextString();
                            } else if (s2.equalsIgnoreCase("d")) { // rarity
                                c.rarity = reader.nextString().charAt(0);
                            } else if (s2.equalsIgnoreCase("e")) { // manacost
                                c.manacost = reader.nextString();
                            } else if (s2.equalsIgnoreCase("f")) { // converted_manacost
                                try {
                                    c.cmc = reader.nextInt();
                                } catch (Exception e) {
                                    reader.skipValue();
                                }

                            } else if (s2.equalsIgnoreCase("g")) { // power
                                try {
                                    ptstr = reader.nextString();
                                    try {
                                        c.power = Integer.parseInt(ptstr);
                                    } catch (NumberFormatException e) {
                                        if (ptstr.equals("*")) {
                                            c.power = CardDbAdapter.STAR;
                                        } else if (ptstr.equals("1+*")) {
                                            c.power = CardDbAdapter.ONEPLUSSTAR;
                                        } else if (ptstr.equals("2+*")) {
                                            c.power = CardDbAdapter.TWOPLUSSTAR;
                                        } else if (ptstr.equals("7-*")) {
                                            c.power = CardDbAdapter.SEVENMINUSSTAR;
                                        } else if (ptstr.equals("*{^2}")) {
                                            c.power = CardDbAdapter.STARSQUARED;
                                        } else if (ptstr.equals("{1/2}")) {
                                            c.power = 0.5f;
                                        } else if (ptstr.equals("1{1/2}")) {
                                            c.power = 1.5f;
                                        } else if (ptstr.equals("2{1/2}")) {
                                            c.power = 2.5f;
                                        } else if (ptstr.equals("3{1/2}")) {
                                            c.power = 3.5f;
                                        }
                                    }
                                } catch (Exception e) {
                                    reader.skipValue();
                                }
                            } else if (s2.equalsIgnoreCase("h")) { // toughness
                                try {
                                    ptstr = reader.nextString();
                                    try {
                                        c.toughness = Integer.parseInt(ptstr);
                                    } catch (NumberFormatException e) {
                                        if (ptstr.equals("*")) {
                                            c.toughness = CardDbAdapter.STAR;
                                        } else if (ptstr.equals("1+*")) {
                                            c.toughness = CardDbAdapter.ONEPLUSSTAR;
                                        } else if (ptstr.equals("2+*")) {
                                            c.toughness = CardDbAdapter.TWOPLUSSTAR;
                                        } else if (ptstr.equals("7-*")) {
                                            c.toughness = CardDbAdapter.SEVENMINUSSTAR;
                                        } else if (ptstr.equals("*{^2}")) {
                                            c.toughness = CardDbAdapter.STARSQUARED;
                                        } else if (ptstr.equals("{1/2}")) {
                                            c.toughness = 0.5f;
                                        } else if (ptstr.equals("1{1/2}")) {
                                            c.toughness = 1.5f;
                                        } else if (ptstr.equals("2{1/2}")) {
                                            c.toughness = 2.5f;
                                        } else if (ptstr.equals("3{1/2}")) {
                                            c.toughness = 3.5f;
                                        }
                                    }
                                } catch (Exception e) {
                                    reader.skipValue();
                                }
                            } else if (s2.equalsIgnoreCase("i")) { // loyalty
                                try {
                                    c.loyalty = reader.nextInt();
                                } catch (Exception e) {
                                    reader.skipValue();
                                }
                            } else if (s2.equalsIgnoreCase("j")) { // ability
                                c.ability = reader.nextString();
                            } else if (s2.equalsIgnoreCase("k")) { // flavor
                                c.flavor = reader.nextString();
                            } else if (s2.equalsIgnoreCase("l")) { // artist
                                c.artist = reader.nextString();
                            } else if (s2.equalsIgnoreCase("m")) { // number
                                try {
                                    c.number = reader.nextString();
                                } catch (Exception e) {
                                    reader.skipValue();
                                }
                            } else if (s2.equalsIgnoreCase("n")) { // color
                                c.color = reader.nextString();
                            } else if (s2.equalsIgnoreCase("x")) { // multiverse id
                                c.multiverse_id = reader.nextInt();
                            }
                        }
                        mDbHelper.createCard(c);
                        elementsParsed++;
                        progReport.reportJsonCardProgress(new String[] { dialogText, dialogText,
                                "" + (int) Math.round(100 * elementsParsed / (double) numTotalElements) });
                        reader.endObject();
                    }
                    reader.endArray();
                }
            }
            reader.endObject();
        }
        if (s.equalsIgnoreCase("w")) { // num_cards
            numTotalElements = reader.nextInt();
        }
    }
    reader.endObject();
    reader.close();

    // Add the set information to the database AFTER adding the cards.
    // This way if the update fails while parsing cards, the database won't think it has the set already, when it doesnt.
    for (MtgSet set : setsAdded) {
        mDbHelper.createSet(set);
    }

    return;
}

From source file:com.gelakinetic.mtgfam.helpers.JsonParser.java

License:Open Source License

public ArrayList<String[]> readUpdateJsonStream(PreferencesAdapter prefAdapter)
        throws MalformedURLException, IOException {
    ArrayList<String[]> patchInfo = new ArrayList<String[]>();
    URL update;/*from  w  w  w . jav  a2 s.c o m*/
    String label;
    String label2;

    update = new URL("https://sites.google.com/site/mtgfamiliar/manifests/patches.json");
    InputStreamReader isr = new InputStreamReader(update.openStream(), "ISO-8859-1");
    JsonReader reader = new JsonReader(isr);

    reader.beginObject();
    while (reader.hasNext()) {
        label = reader.nextName();

        if (label.equals("Date")) {
            String lastUpdate = prefAdapter.getLastUpdate();
            currentPatchDate = reader.nextString();
            if (lastUpdate.equals(currentPatchDate)) {
                reader.close();
                return null;
            }
        } else if (label.equals("Patches")) {
            reader.beginArray();
            while (reader.hasNext()) {
                reader.beginObject();
                String[] setdata = new String[3];
                while (reader.hasNext()) {
                    label2 = reader.nextName();
                    if (label2.equals("Name")) {
                        setdata[0] = reader.nextString();
                    } else if (label2.equals("URL")) {
                        setdata[1] = reader.nextString();
                    } else if (label2.equals("Code")) {
                        setdata[2] = reader.nextString();
                    }
                }
                patchInfo.add(setdata);
                reader.endObject();
            }
            reader.endArray();
        }
    }
    reader.endObject();
    reader.close();

    return patchInfo;
}

From source file:com.gelakinetic.mtgfam.helpers.JsonParser.java

License:Open Source License

public void readLegalityJsonStream(CardDbAdapter cda, PreferencesAdapter prefAdapter, boolean reparseDatabase)
        throws IOException, FamiliarDbException {

    CardDbAdapter mDbHelper;//from  w  w  w .  ja  v a  2s . c  om
    String legalSet;
    String bannedCard;
    String restrictedCard;
    String formatName;
    String jsonArrayName;
    String jsonTopLevelName;

    URL legal = new URL("https://sites.google.com/site/mtgfamiliar/manifests/legality.json");
    InputStream in = new BufferedInputStream(legal.openStream());

    JsonReader reader = new JsonReader(new InputStreamReader(in, "ISO-8859-1"));

    mDbHelper = cda;

    reader.beginObject();
    while (reader.hasNext()) {

        jsonTopLevelName = reader.nextName();
        if (jsonTopLevelName.equalsIgnoreCase("Date")) {
            currentRulesDate = reader.nextString();

            // compare date, maybe return, update sharedprefs
            String spDate = prefAdapter.getLegalityDate();
            if (spDate != null && spDate.equals(currentRulesDate)) {
                if (!reparseDatabase) { // if we're reparsing, screw the date
                    reader.close();
                    return; // dates match, nothing new here.
                }
            }

            mDbHelper.dropLegalTables();
            mDbHelper.createLegalTables();
        } else if (jsonTopLevelName.equalsIgnoreCase("Formats")) {

            reader.beginObject();
            while (reader.hasNext()) {
                formatName = reader.nextName();

                mDbHelper.createFormat(formatName);

                reader.beginObject();
                while (reader.hasNext()) {
                    jsonArrayName = reader.nextName();

                    if (jsonArrayName.equalsIgnoreCase("Sets")) {
                        reader.beginArray();
                        while (reader.hasNext()) {
                            legalSet = reader.nextString();
                            mDbHelper.addLegalSet(legalSet, formatName);
                        }
                        reader.endArray();
                    } else if (jsonArrayName.equalsIgnoreCase("Banlist")) {
                        reader.beginArray();
                        while (reader.hasNext()) {
                            bannedCard = reader.nextString();
                            mDbHelper.addLegalCard(bannedCard, formatName, CardDbAdapter.BANNED);
                        }
                        reader.endArray();
                    } else if (jsonArrayName.equalsIgnoreCase("Restrictedlist")) {
                        reader.beginArray();
                        while (reader.hasNext()) {
                            restrictedCard = reader.nextString();
                            mDbHelper.addLegalCard(restrictedCard, formatName, CardDbAdapter.RESTRICTED);
                        }
                        reader.endArray();
                    }
                }
                reader.endObject();
            }
            reader.endObject();
        }
    }
    reader.endObject();

    reader.close();
    return;
}

From source file:com.gelakinetic.mtgfam.helpers.JsonParser.java

License:Open Source License

public void readTCGNameJsonStream(PreferencesAdapter prefAdapter, CardDbAdapter mDbHelper,
        boolean reparseDatabase) throws MalformedURLException, IOException, FamiliarDbException {
    URL update;/*ww w.  j a  v a  2 s .  c o m*/
    String label;
    String label2;
    String name = null, code = null;

    update = new URL("https://sites.google.com/site/mtgfamiliar/manifests/TCGnames.json");
    InputStreamReader isr = new InputStreamReader(update.openStream(), "ISO-8859-1");
    JsonReader reader = new JsonReader(isr);

    reader.beginObject();
    while (reader.hasNext()) {
        label = reader.nextName();

        if (label.equals("Date")) {
            String lastUpdate = prefAdapter.getLastTCGNameUpdate();
            currentTCGNamePatchDate = reader.nextString();
            if (lastUpdate.equals(currentTCGNamePatchDate) && !reparseDatabase) {
                reader.close();
                return;
            }
        } else if (label.equals("Sets")) {
            reader.beginArray();
            while (reader.hasNext()) {
                reader.beginObject();
                while (reader.hasNext()) {
                    label2 = reader.nextName();
                    if (label2.equals("Code")) {
                        code = reader.nextString();
                    } else if (label2.equals("TCGName")) {
                        name = reader.nextString();
                    }
                }
                mDbHelper.addTCGname(name, code);
                reader.endObject();
            }
            reader.endArray();
        }
    }
    reader.endObject();
    reader.close();

}

From source file:com.gelakinetic.mtgfam.helpers.updaters.CardAndSetParser.java

License:Open Source License

/**
 * If a set has a patch, and doesn't exist in the database, this is called to parse an InputStream of JSON and add
 * it into the database.//from   w w  w.ja v a  2  s  .co m
 * <p/>
 * The JSON uses single character keys, which is a silly thing I did in the name of compression. The patches are
 * zipped anyway, so it doesn't matter much, but we're stuck with it.
 * <p/>
 * There is some special processing for weird power and toughness too
 *
 * @param in               An InputStream containing valid JSON
 * @param progressReporter A percentage progress is reported through this class to be shown in the notification
 * @param cardsToAdd       An array list to place cards before adding to the database
 * @param setsToAdd        An array list to place sets before adding to the database
 * @throws IOException If something goes wrong with the InputStream, this will be thrown
 */
public void readCardJsonStream(InputStream in, CardProgressReporter progressReporter,
        ArrayList<MtgCard> cardsToAdd, ArrayList<MtgSet> setsToAdd) throws IOException {

    JsonReader reader = new JsonReader(new InputStreamReader(in, "ISO-8859-1"));
    /* Three levels of strings for parsing nested JSON */
    String s, s1, s2;
    String pouTouStr;

    int numTotalElements = 0;
    int elementsParsed = 0;

    reader.beginObject();
    reader.nextName();
    reader.beginObject();

    while (reader.hasNext()) {

        s = reader.nextName();
        if (s.equalsIgnoreCase("v")) { /* bdd_date */
            reader.skipValue();
        }
        if (s.equalsIgnoreCase("u")) { /* bdd_version */
            reader.skipValue();
        }
        if (s.equalsIgnoreCase("s")) { /* sets */
            reader.beginObject();
            while (reader.hasNext()) {
                s1 = reader.nextName();
                if (s1.equalsIgnoreCase("b")) { /* set */
                    MtgSet set;

                    JsonToken jt = reader.peek();
                    if (jt.equals(JsonToken.BEGIN_OBJECT)) {
                        set = new MtgSet();
                        reader.beginObject();
                        while (reader.hasNext()) {
                            s2 = reader.nextName();
                            if (s2.equalsIgnoreCase("a")) { /* name */
                                set.name = reader.nextString();
                            }
                            if (s2.equalsIgnoreCase("r")) { /* code_magicCards */
                                set.codeMagicCards = reader.nextString();
                            }
                            if (s2.equalsIgnoreCase("q")) { /* code */
                                set.code = reader.nextString();
                            }
                            if (s2.equalsIgnoreCase("y")) { /* date */
                                set.date = reader.nextLong();
                            }
                        }
                        setsToAdd.add(set);
                        reader.endObject();
                    } else if (jt.equals(JsonToken.BEGIN_ARRAY)) {
                        reader.beginArray();
                        while (reader.hasNext()) {
                            set = new MtgSet();
                            reader.beginObject();
                            while (reader.hasNext()) {
                                s2 = reader.nextName();
                                if (s2.equalsIgnoreCase("a")) { /* name */
                                    set.name = reader.nextString();
                                }
                                if (s2.equalsIgnoreCase("r")) { /* code_magicCards */
                                    set.codeMagicCards = reader.nextString();
                                }
                                if (s2.equalsIgnoreCase("q")) { /* code */
                                    set.code = reader.nextString();
                                }
                                if (s2.equalsIgnoreCase("y")) { /* date */
                                    set.date = reader.nextLong();
                                }
                            }
                            setsToAdd.add(set);
                            reader.endObject();
                        }
                        reader.endArray();
                    }
                }
            }
            reader.endObject();
        }
        if (s.equalsIgnoreCase("p")) { /* cards */

            reader.beginObject();
            while (reader.hasNext()) {
                s1 = reader.nextName();
                if (s1.equalsIgnoreCase("o")) { /* card */
                    MtgCard c;
                    reader.beginArray();
                    while (reader.hasNext()) {

                        reader.beginObject();
                        c = new MtgCard();
                        while (reader.hasNext()) {
                            s2 = reader.nextName();
                            if (s2.equalsIgnoreCase("a")) { /* name */
                                c.name = reader.nextString();
                            } else if (s2.equalsIgnoreCase("b")) { /* set */
                                c.set = reader.nextString();
                            } else if (s2.equalsIgnoreCase("c")) { /* type */
                                c.type = reader.nextString();
                            } else if (s2.equalsIgnoreCase("d")) { /* rarity */
                                c.rarity = reader.nextString().charAt(0);
                            } else if (s2.equalsIgnoreCase("e")) { /* manaCost */
                                c.manaCost = reader.nextString();
                            } else if (s2.equalsIgnoreCase("f")) { /* converted_manaCost */
                                try {
                                    c.cmc = reader.nextInt();
                                } catch (NumberFormatException e) {
                                    reader.skipValue();
                                }
                            } else if (s2.equalsIgnoreCase("g")) { /* power */
                                pouTouStr = reader.nextString();
                                try {
                                    c.power = Integer.parseInt(pouTouStr);
                                } catch (NumberFormatException e) {
                                    switch (pouTouStr) {
                                    case "*":
                                        c.power = CardDbAdapter.STAR;
                                        break;
                                    case "1+*":
                                        c.power = CardDbAdapter.ONE_PLUS_STAR;
                                        break;
                                    case "2+*":
                                        c.power = CardDbAdapter.TWO_PLUS_STAR;
                                        break;
                                    case "7-*":
                                        c.power = CardDbAdapter.SEVEN_MINUS_STAR;
                                        break;
                                    case "*{^2}":
                                        c.power = CardDbAdapter.STAR_SQUARED;
                                        break;
                                    case "{1/2}":
                                        c.power = 0.5f;
                                        break;
                                    case "1{1/2}":
                                        c.power = 1.5f;
                                        break;
                                    case "2{1/2}":
                                        c.power = 2.5f;
                                        break;
                                    case "3{1/2}":
                                        c.power = 3.5f;
                                        break;
                                    }
                                }
                            } else if (s2.equalsIgnoreCase("h")) { /* toughness */
                                pouTouStr = reader.nextString();
                                try {
                                    c.toughness = Integer.parseInt(pouTouStr);
                                } catch (NumberFormatException e) {
                                    switch (pouTouStr) {
                                    case "*":
                                        c.toughness = CardDbAdapter.STAR;
                                        break;
                                    case "1+*":
                                        c.toughness = CardDbAdapter.ONE_PLUS_STAR;
                                        break;
                                    case "2+*":
                                        c.toughness = CardDbAdapter.TWO_PLUS_STAR;
                                        break;
                                    case "7-*":
                                        c.toughness = CardDbAdapter.SEVEN_MINUS_STAR;
                                        break;
                                    case "*{^2}":
                                        c.toughness = CardDbAdapter.STAR_SQUARED;
                                        break;
                                    case "{1/2}":
                                        c.toughness = 0.5f;
                                        break;
                                    case "1{1/2}":
                                        c.toughness = 1.5f;
                                        break;
                                    case "2{1/2}":
                                        c.toughness = 2.5f;
                                        break;
                                    case "3{1/2}":
                                        c.toughness = 3.5f;
                                        break;
                                    }
                                }
                            } else if (s2.equalsIgnoreCase("i")) { /* loyalty */
                                try {
                                    c.loyalty = reader.nextInt();
                                } catch (NumberFormatException e) {
                                    reader.skipValue();
                                }
                            } else if (s2.equalsIgnoreCase("j")) { /* ability */
                                c.ability = reader.nextString();
                            } else if (s2.equalsIgnoreCase("k")) { /* flavor */
                                c.flavor = reader.nextString();
                            } else if (s2.equalsIgnoreCase("l")) { /* artist */
                                c.artist = reader.nextString();
                            } else if (s2.equalsIgnoreCase("m")) { /* number */
                                c.number = reader.nextString();
                            } else if (s2.equalsIgnoreCase("n")) { /* color */
                                c.color = reader.nextString();
                            } else if (s2.equalsIgnoreCase("x")) { /* multiverse id */
                                try {
                                    c.multiverseId = reader.nextInt();
                                } catch (NumberFormatException e) {
                                    reader.skipValue();
                                }
                            }
                        }
                        cardsToAdd.add(c);
                        elementsParsed++;
                        progressReporter.reportJsonCardProgress(
                                (int) Math.round(100 * elementsParsed / (double) numTotalElements));
                        reader.endObject();
                    }
                    reader.endArray();
                }
            }
            reader.endObject();
        }
        if (s.equalsIgnoreCase("w")) { /* num_cards */
            try {
                numTotalElements = reader.nextInt();
            } catch (NumberFormatException e) {
                reader.skipValue();
            }
        }
    }
    reader.endObject();
    reader.close();
}