package com.android.example; import java.lang.reflect.Array; import java.lang.reflect.Field; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class MyJSONParser { public static Object populateObjectFromJSON(Class classname, JSONObject js) { Object obj = null; System.out.println("Populating " + classname.getSimpleName()+ " -with- " + js.toString()); try { obj = classname.newInstance(); } catch (InstantiationException e1) { System.err.println(e1.getMessage()); return null; } catch (IllegalAccessException e1) { System.err.println(e1.getMessage()); return null; } Field[] fields = classname.getFields(); for (Field f : fields) { try { if (js.has(f.getName())) { String type = f.getType().getSimpleName(); if (type.equalsIgnoreCase("boolean")) { f.setBoolean(obj, js.getBoolean(f.getName())); } else if (type.equalsIgnoreCase("int")) { f.setInt(obj, js.getInt(f.getName())); } else if (type.equalsIgnoreCase("double")) { f.setDouble(obj, js.getDouble(f.getName())); } else if (type.equalsIgnoreCase("float")) { f.setFloat(obj, (float) js.getDouble(f.getName())); } else if (type.equalsIgnoreCase("string")) { f.set(obj, js.getString(f.getName())); } else if (f.getType().isArray()) { // System.out.println("This is an ARRAY: " + f.getName()); insertArrayFromJSON(obj, f, js.getJSONArray(f.getName())); } else { f.set(obj,populateObjectFromJSON(f.getType(),js.getJSONObject(f.getName()))); } } } catch (IllegalArgumentException e) { System.err.println(e.getMessage()); } catch (IllegalAccessException e) { System.err.println(e.getMessage()); } catch (JSONException e) { System.err.println(e.getMessage()); } } return obj; } public static void insertArrayFromJSON(Object obj, Field f, JSONArray js, int pos) throws IllegalArgumentException, NegativeArraySizeException, IllegalAccessException, JSONException { f.set(obj,Array.newInstance(f.getType().getComponentType(), js.length())); String type = f.getType().getComponentType().getSimpleName(); for (int i = 0; i < js.length(); i++) { if (f.getType().getComponentType().isArray()) { System.out.println("An array!! " + f.getName()); //TO-DO } else if (!f.getType().getComponentType().isPrimitive()&& (!type.equalsIgnoreCase("string"))) { //System.out.println(f.getType().getSimpleName() + " isn't primitive " + f.getName()); Array.set(f.get(obj),i,populateObjectFromJSON(f.getType().getComponentType(),js.getJSONObject(i))); //Array.set(f.get(obj),i,populateObjectFromJSON(f.getType().getComponentType(), new JSONObject(js.getJSONArray(i).toString()))); } else { //Primitive Array.set(f.get(obj), i, js.get(i)); } } } public static JSONObject parseObjectToJSONClass(Object obj) {JSONObject js = new JSONObject(); Class c = obj.getClass(); Field[] fields = c.getFields(); for (Field f : fields) { try { System.out.println(f.getName() + " - "+ f.getType().getSimpleName() + " - " + f.get(obj)); String name = f.getName(); String type = f.getType().getSimpleName(); if (f.get(obj) != null) { if (type.equalsIgnoreCase("boolean")) { js.put(name, f.getBoolean(obj)); } else if (type.equalsIgnoreCase("int")) { js.put(name, f.getInt(obj)); } else if (type.equalsIgnoreCase("double")) { js.put(name, f.getDouble(obj)); } else if (type.equalsIgnoreCase("float")) { js.put(name, f.getFloat(obj)); } else if (type.equalsIgnoreCase("string")) { js.put(name, (String) f.get(obj)); } else if (type.endsWith("]")) { JSONArray ar = new JSONArray(); for (int i = 0; i < Array.getLength(f.get(obj)); i++) { ar.put(i, Array.get(f.get(obj), i)); } js.put(name, ar); } else { js.put(name, parseObjectToJSONClass(f.get(obj))); } } } catch (IllegalArgumentException e) { System.err.println(e.getMessage()); } catch (IllegalAccessException e) { System.err.println(e.getMessage()); } catch (JSONException e) { System.err.println(e.getMessage()); } } return js; } }