11

how can I "convert" a Cursor to a JSONArray?

my cursor as 3columns (_id, name, birth)

I've searched but I can't not find any examples

3 Answers 3

25

Cursor to JSONArray

public JSONArray cur2Json(Cursor cursor) {

    JSONArray resultSet = new JSONArray();
    cursor.moveToFirst();
    while (cursor.isAfterLast() == false) {
        int totalColumn = cursor.getColumnCount();
        JSONObject rowObject = new JSONObject();   
        for (int i = 0; i < totalColumn; i++) {
            if (cursor.getColumnName(i) != null) {
                try {
                    rowObject.put(cursor.getColumnName(i),
                            cursor.getString(i));
                } catch (Exception e) {
                    Log.d(TAG, e.getMessage());
                }
            }
        }
        resultSet.put(rowObject);
        cursor.moveToNext();
    }

    cursor.close();
    return resultSet;

}
Sign up to request clarification or add additional context in comments.

4 Comments

What it totalColumn here?
int totalColumn = cursor.getColumnCount();
Thanks. I had figured this out. This code works perfectly fine for me.
Simplify cursor.isAfterLast() == false => !cursor.isAfterLast()
12
private String cursorToString(Cursor crs) {
    JSONArray arr = new JSONArray();
    crs.moveToFirst();
    while (!crs.isAfterLast()) {
        int nColumns = crs.getColumnCount();
        JSONObject row = new JSONObject();
        for (int i = 0 ; i < nColumns ; i++) {
            String colName = crs.getColumnName(i);
            if (colName != null) {
                String val = "";
                try {
                    switch (crs.getType(i)) {
                    case Cursor.FIELD_TYPE_BLOB   : row.put(colName, crs.getBlob(i).toString()); break;
                    case Cursor.FIELD_TYPE_FLOAT  : row.put(colName, crs.getDouble(i))         ; break;
                    case Cursor.FIELD_TYPE_INTEGER: row.put(colName, crs.getLong(i))           ; break;
                    case Cursor.FIELD_TYPE_NULL   : row.put(colName, null)                     ; break;
                    case Cursor.FIELD_TYPE_STRING : row.put(colName, crs.getString(i))         ; break;
                    }
                } catch (JSONException e) {
                }
            }
        }
        arr.put(row);
        if (!crs.moveToNext())
            break;
    }
    crs.close(); // close the cursor
    return arr.toString();
}

1 Comment

It's absolutely what I need, because my Cursor have different types of data.
5

You can't convert the contents of a cursor directly into a JSONObject, but you can do that with some logic.

for eg: retrieve the Strings from the cursor, form a String which follows the JSON format, and use it to make a json object :

JSONObject jFromCursor=new JSONObject(string_in_JSON_format);

2 Comments

So I need to iterate the cursor and concatenate the Strings ("_id: " + cursor.getString(0) ", "name: "" + cursor.getString(1) ", "birth: "" + cursor.getString(2))???
Well this is just silly if the whole reason to get a JSON object is to then convert it to a string in JSON format using toString()!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.