利用method.invoke(..)解析json - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

利用method.invoke(..)解析json

發表時(shí)間:2020-11-21

發布人(rén):融晨科技

浏覽次數:78


//調用
iniJSONObject(Person.class.getName(), createJSONObject());
  iniJSONObject2(World.class.getName(), createJSONObject2());
 
 
/**
  * 隻是(shì)一個(gè)普通的(de)對象
  *
  * @param name
  *            (包名+類名)
  * @return
  */
 private Object iniJSONObject(String name, JSONObject jsonObject) {
  try {
   //隻放類名是(shì)錯的(de)...........
   // Class<?> forName = Class.forName("Person");
   // 包名+類名,正确的(de)
   //String name2 = Person.class.getName();
   Class<?> forName = Class.forName(name);
   Object newInstance = forName.newInstance();
   Method[] methods = forName.getMethods();
   HashMap<String, Method> hashMap = new HashMap<String, Method>();
   for (int i = 0; i < methods.length; i++) {
    String methodName = methods[i].getName();
    System.out.println(forName + "方法列表:" + methodName);
    hashMap.put(methodName, methods[i]);
   }
   // 獲取JSONObject的(de)key字段列表.........
   // 獲取JSONObject的(de)key字段列表.........
   // 獲取JSONObject的(de)key字段列表.........
   Iterator iterator = jsonObject.keys();
   while (iterator.hasNext()) {
    String key = iterator.next().toString();
    Object value = http://www.sjsjw.com/100/000587MYM026233/jsonObject.get(key);
    // userName
    // userAge
    // userHobby
    System.out.println("jsonObject的(de)key=" + key);
    // 看方法列表有沒有該set方法
    if (hashMap.containsKey("set" + wordFirstToUpper(key))) {
     Method method = hashMap.get("set" + wordFirstToUpper(key));
     String methodName = method.getName();
     String type = method.getParameterTypes()[0].getName();
     // 調用方法...........
     method.invoke(newInstance, value);
     System.out.println("調用方法:" + methodName + "方法的(de)參數類型是(shì):" + type+"值得類型:"+value.getClass().getName());
     
    }
   }
   System.out.println("解析結果:" + newInstance.toString());
   return newInstance;
  } catch (JSONException e) {
   e.printStackTrace();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (IllegalArgumentException e) {
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   e.printStackTrace();
  }
  return null;
 }
 
 
/**
  * 對象裏有對象
  *
  * @param name
  *            (包名+類名)
  * @param jsonObject
  */
 private void iniJSONObject2(String name, JSONObject jsonObject) {
  try {
   Class<?> forName = Class.forName(name);
   Object newInstance = forName.newInstance();
   // 獲取該類的(de)方法列表
   Method[] methods = forName.getMethods();
   HashMap<String, Method> hashMap2 = new HashMap<String, Method>();
   for (int i = 0; i < methods.length; i++) {
    hashMap2.put(methods[i].getName(), methods[i]);
   }
   Iterator keys = jsonObject.keys();
   while (keys.hasNext()) {
    // key字段.............
    String key = keys.next().toString();
    // value
    Object object = jsonObject.get(key);
    if (hashMap2.containsKey("set" + wordFirstToUpper(key))) {
     // 得到(dào)該set方法的(de)參數類型
     Method method = hashMap2.get("set" + wordFirstToUpper(key));
     // 參數的(de)類型(包名+類名)
     String type = method.getParameterTypes()[0].getName();
     if (object instanceof JSONObject) {
      // 是(shì)個(gè)JSONObject
      method.invoke(newInstance,
        iniJSONObject(type, (JSONObject) object));
     } else if (object instanceof JSONArray) {
     } else {
      method.invoke(newInstance, object);
     }
     System.out.println("方法的(de)參數類型:"+type+"/值得類型:/"+object.getClass().getName());
    }
   }
   System.out.println("解析後的(de)結果:" + newInstance.toString());
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (JSONException e) {
   e.printStackTrace();
  } catch (IllegalArgumentException e) {
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   e.printStackTrace();
  }
 }
 
/**
  * @param word
  * @return  首字母大(dà)寫
  */
 public static String wordFirstToUpper(String word) {
  // int c = word.charAt(0);
  // if (c >= 97 && c <= 122) {
  // c -= 32;
  // }
  // return String.format("%c%s", c, word.substring(1));
  return word.replaceFirst(word.substring(0, 1), word.substring(0, 1)
    .toUpperCase());
 }
 
 
 
public JSONObject createJSONObject() {
  JSONObject jsonObject = new JSONObject();
  try {
   jsonObject.put("userName", "wuxifu");
   jsonObject.put("userAge", 110);
   jsonObject.put("userHobby", 1);
  } catch (JSONException e) {
   e.printStackTrace();
  }
  return jsonObject;
 }
 public JSONObject createJSONObject2() {
  JSONObject jsonObject = new JSONObject();
  JSONObject jsonObject2 = new JSONObject();
  try {
   jsonObject.put("person", jsonObject2);
   jsonObject.put("nums", 110);
   jsonObject.put("ages", 2015);
   jsonObject2.put("userName", "wuxifu");
   jsonObject2.put("userAge", 110);
   jsonObject2.put("userHobby", 1);
  } catch (JSONException e) {
   e.printStackTrace();
  }
  return jsonObject;
 }
 
package com.example.testviewpager;
public class Person {
   private String userName;
   private int   userAge;
   private int userHobby;
  
public Person() {
 super();
 // TODO Auto-generated constructor stub
}
public Person(String userName, int userAge, int userHobby) {
 super();
 this.userName = userName;
 this.userAge = userAge;
 this.userHobby = userHobby;
}
public String getUserName() {
 return userName;
}
public void setUserName(String userName) {
 this.userName = userName;
}
public int getUserAge() {
 return userAge;
}
public void setUserAge(int userAge) {
 this.userAge = userAge;
}
public int getUserHobby() {
 return userHobby;
}
public void setUserHobby(int userHobby) {
 this.userHobby = userHobby;
}
@Override
public String toString() {
 return "Person [userName=" + userName + ", userAge=" + userAge
   + ", userHobby=" + userHobby + "]";
}
  
}
 
package com.example.testviewpager;
public class World {
 private Person person;
 private int  nums;
 private int  ages;
 public World() {
  super();
 }
 public Person getPerson() {
  return person;
 }
 public void setPerson(Person person) {
  this.person = person;
 }
 public int getNums() {
  return nums;
 }
 public void setNums(int nums) {
  this.nums = nums;
 }
 public int getAges() {
  return ages;
 }
 public void setAges(int ages) {
  this.ages = ages;
 }
 @Override
 public String toString() {
  return "World [person=" + person + ", nums=" + nums + ", ages=" + ages
    + "]";
 }
 
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 

相關案例查看更多