利用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
+ "]";
}
}