package io.myweb.util; import android.content.ContentValues; import android.database.Cursor; import android.util.Base64; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; import java.util.Iterator; public class JSONUtils { public static ContentValues jsonToValues(JSONObject json) { ContentValues values = new ContentValues(); Iterator<String> i = json.keys(); while (i.hasNext()) { String name = i.next(); Object value = json.opt(name); if (value != null) values.put(name, value.toString()); else values.putNull(name); } return values; } public static JSONObject cursorToJSONObject(Cursor cursor, JSONArray range) { JSONObject json = new JSONObject(); if (cursor != null) { JSONArray jsonArray = new JSONArray(); int fromIdx = 0; int toIdx = cursor.getCount(); if (range != null && range.length()==2) try { // calculate proper range int rangeFrom = range.getInt(0); if (rangeFrom < 0) rangeFrom = 0; else if (rangeFrom > toIdx) rangeFrom = toIdx; int rangeTo = range.getInt(1); if (rangeTo<rangeFrom) rangeTo = rangeFrom; else if (rangeTo > toIdx) rangeTo = toIdx; fromIdx = rangeFrom; toIdx = rangeTo; JSONArray rangeArray = new JSONArray(); rangeArray.put(rangeFrom); rangeArray.put(rangeTo); json.put("range", rangeArray); } catch(JSONException e) { e.printStackTrace(); } if (fromIdx > 0) cursor.moveToPosition(fromIdx-1); while (cursor.moveToNext() && fromIdx < toIdx) { JSONObject obj = new JSONObject(); for (int i = 0; i < cursor.getColumnCount(); i++) { String name = cursor.getColumnName(i); try { switch (cursor.getType(i)) { case Cursor.FIELD_TYPE_INTEGER: obj.put(name, cursor.getInt(i)); break; case Cursor.FIELD_TYPE_FLOAT: obj.put(name, cursor.getDouble(i)); break; case Cursor.FIELD_TYPE_STRING: obj.put(name, cursor.getString(i)); break; case Cursor.FIELD_TYPE_NULL: obj.put(name, JSONObject.NULL); break; case Cursor.FIELD_TYPE_BLOB: obj.put(name, Base64.encodeToString(cursor.getBlob(i), Base64.DEFAULT)); break; } } catch (JSONException e) { e.printStackTrace(); } } jsonArray.put(obj); fromIdx++; } try { json.put("count", cursor.getCount()); json.put("columns", stringArrayToJSONArray(cursor.getColumnNames())); json.put("result", jsonArray); } catch (JSONException e) { e.printStackTrace(); } cursor.close(); } return json; } public static JSONArray stringArrayToJSONArray(String[] strings) { if (strings==null) return null; if (strings.length==0) return new JSONArray(); return new JSONArray(Arrays.asList(strings)); } public static String[] jsonArrayToStringArray(JSONArray json) { if (json == null ) return null; if (json.length()==0) return new String[] {}; String[] strings = new String[json.length()]; for (int i = 0; i < json.length(); i++) { try { strings[i] = json.getString(i); } catch (JSONException e) { e.printStackTrace(); } } return strings; } }