Advertisement
endermuabdib

MyJSONParser.java

Sep 6th, 2012
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.24 KB | None | 0 0
  1. package com.android.example;
  2.  
  3. import java.lang.reflect.Array;
  4. import java.lang.reflect.Field;
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8.  
  9. public class MyJSONParser {
  10.  
  11.     public static Object populateObjectFromJSON(Class<?> classname, JSONObject js) {
  12.         Object obj = null;
  13.         System.out.println("Populating " + classname.getSimpleName()+ " -with- " + js.toString());
  14.         try {
  15.             obj = classname.newInstance();
  16.         } catch (InstantiationException e1) {
  17.             System.err.println(e1.getMessage());
  18.             return null;
  19.         } catch (IllegalAccessException e1) {
  20.             System.err.println(e1.getMessage());
  21.             return null;
  22.         }
  23.  
  24.         Field[] fields = classname.getFields();
  25.         for (Field f : fields) {
  26.             try {
  27.                 if (js.has(f.getName())) {
  28.                         String type = f.getType().getSimpleName();
  29.                     if (type.equalsIgnoreCase("boolean")) {
  30.                         f.setBoolean(obj, js.getBoolean(f.getName()));
  31.                     } else if (type.equalsIgnoreCase("int")) {
  32.                         f.setInt(obj, js.getInt(f.getName()));
  33.                     } else if (type.equalsIgnoreCase("double")) {
  34.                         f.setDouble(obj, js.getDouble(f.getName()));
  35.                     } else if (type.equalsIgnoreCase("float")) {
  36.                         f.setFloat(obj, (float) js.getDouble(f.getName()));
  37.                     } else if (type.equalsIgnoreCase("string")) {
  38.                         f.set(obj, js.getString(f.getName()));
  39.                     } else if (f.getType().isArray()) {
  40.                         // System.out.println("This is an ARRAY: " + f.getName());
  41.                         insertArrayFromJSON(obj, f, js.getJSONArray(f.getName()));
  42.                     } else {
  43.                         f.set(obj,populateObjectFromJSON(f.getType(),js.getJSONObject(f.getName())));
  44.                     }
  45.                 }
  46.             } catch (IllegalArgumentException e) {
  47.                 System.err.println(e.getMessage());
  48.             } catch (IllegalAccessException e) {
  49.                 System.err.println(e.getMessage());
  50.             } catch (JSONException e) {
  51.                 System.err.println(e.getMessage());
  52.             }
  53.         }
  54.  
  55.         return obj;
  56.     }
  57.  
  58.     public static void insertArrayFromJSON(Object obj, Field f, JSONArray js, int pos) throws IllegalArgumentException, NegativeArraySizeException, IllegalAccessException, JSONException {
  59.         f.set(obj,Array.newInstance(f.getType().getComponentType(), js.length()));
  60.         String type = f.getType().getComponentType().getSimpleName();
  61.        
  62.         for (int i = 0; i < js.length(); i++) {
  63.             if (f.getType().getComponentType().isArray()) {
  64.                 System.out.println("An array!! " + f.getName());
  65.                 //TO-DO
  66.             } else if (!f.getType().getComponentType().isPrimitive()&& (!type.equalsIgnoreCase("string"))) {
  67.                 //System.out.println(f.getType().getSimpleName() + " isn't primitive " + f.getName());
  68.                 Array.set(f.get(obj),i,populateObjectFromJSON(f.getType().getComponentType(),js.getJSONObject(i)));
  69.                 //Array.set(f.get(obj),i,populateObjectFromJSON(f.getType().getComponentType(), new JSONObject(js.getJSONArray(i).toString())));
  70.             } else {
  71.                 //Primitive
  72.                 Array.set(f.get(obj), i, js.get(i));
  73.             }
  74.         }
  75.     }
  76.    
  77.     public static JSONObject parseObjectToJSONClass(Object obj) {JSONObject js = new JSONObject();
  78.         Class<?> c = obj.getClass();
  79.         Field[] fields = c.getFields();
  80.  
  81.         for (Field f : fields) {
  82.             try {
  83.             System.out.println(f.getName() + " - "+ f.getType().getSimpleName() + " - " + f.get(obj));
  84.  
  85.             String name = f.getName();
  86.             String type = f.getType().getSimpleName();
  87.             if (f.get(obj) != null) {
  88.                 if (type.equalsIgnoreCase("boolean")) {
  89.                     js.put(name, f.getBoolean(obj));
  90.                 } else if (type.equalsIgnoreCase("int")) {
  91.                     js.put(name, f.getInt(obj));
  92.                 } else if (type.equalsIgnoreCase("double")) {
  93.                     js.put(name, f.getDouble(obj));
  94.                 } else if (type.equalsIgnoreCase("float")) {
  95.                     js.put(name, f.getFloat(obj));
  96.                 } else if (type.equalsIgnoreCase("string")) {
  97.                     js.put(name, (String) f.get(obj));
  98.                 } else if (type.endsWith("]")) {
  99.                     JSONArray ar = new JSONArray();
  100.                     for (int i = 0; i < Array.getLength(f.get(obj)); i++) {
  101.                         ar.put(i, Array.get(f.get(obj), i));
  102.                     }
  103.                     js.put(name, ar);
  104.                 } else {
  105.                 js.put(name, parseObjectToJSONClass(f.get(obj)));
  106.                 }
  107.             }
  108.             } catch (IllegalArgumentException e) {
  109.             System.err.println(e.getMessage());
  110.             } catch (IllegalAccessException e) {
  111.             System.err.println(e.getMessage());
  112.             } catch (JSONException e) {
  113.             System.err.println(e.getMessage());
  114.             }
  115.         }
  116.         return js;
  117.     }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement