现在只能针对下面这样的json和比它简单的json进行解析,能帮忙扩展一下么?{
"name": "liuyx",
"age": 23,
"salary": 23.3,
"lovers": [
{
"name": "zhangweizhen",
"age": 23
},
{
"name": "zhaoushan",
"age": 23
},
{
"name": "huqiong",
"age": 23
}
]
}
JAVA代码:
Lists
public class Lists
{
public static <T> ArrayList<T> newArrayList()
{
return new ArrayList<T>();
}
}
Strings代码public class Strings
{
public static boolean isNullOrEmpty(String s)
{
return s == null || s.equals("");
} public static String nullToEmpty(String s)
{
return s == null ? "" : s;
} /**
* 将字符串首字母大写
* @param src
* @return
*/
public static String capitalize(String src)
{
if(src == null || src.equals("")) return src;
char[] chars = src.toCharArray();
final int len = chars.length;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < len; i++)
{
if(i == 0)
{
char capChar = cap(chars[0]);
sb.append(capChar);
} else{
sb.append(chars[i]);
}
} return sb.toString();
} /**
* 从标准包名获得前缀
* @param canonicalName
* @return
*/
public static String getPrefixPackName(String canonicalName){
String[] strs = canonicalName.split("[.]");
int len = strs.length;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < len - 1; i++){
sb.append(strs[i]).append(".");
}
sb.delete(sb.length()-1,sb.length());
return sb.toString();
} private static char cap(char src)
{
return (char)(src - 32);
}
}
JSONParserUtil——通用JSON解析工具package com.pplive.androidphone.ui.login.comment_system.utils;import com.pplive.android.util.Lists;
import com.pplive.android.util.Strings;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;/**
* User: youxueliu
* Date: 13-8-21
* Time: 下午4:49
*/
public class JSONParserUtil { public static <T> T parser(String json,Class<T> cls){
try{
JSONObject jsonObject = new JSONObject(json);
return parserJSONObj(jsonObject,cls);
}catch (JSONException e){
// ignore
e.printStackTrace();
}
return null;
} private static <T> T parserJSONObj(JSONObject jsonObject,Class<T> cls){
try{
T bean = cls.newInstance();
final Iterator<String> keys = jsonObject.keys();
while(keys.hasNext()){
final String key = keys.next();
final Object obj = jsonObject.opt(key);
Field field = cls.getDeclaredField(key);
final Class<?> fieldType = field.getType();
final String setMethodName = "set" + Strings.capitalize(key);
final Method method = cls.getDeclaredMethod(setMethodName,fieldType);
if(primitypeOrNull(obj))
{
// 属性值默认全部认做String
method.invoke(bean, obj + "");
}else if(obj instanceof JSONObject){
method.invoke(bean, parserJSONObj((JSONObject) obj, fieldType));
}else if(obj instanceof JSONArray){
final String nestClsName = cls.getCanonicalName()+"$"+Strings.capitalize(key.substring(0, key.length() - 1));
final Class<?> nestCls = Class.forName(nestClsName);
final JSONArray jsonArray = (JSONArray)obj;
method.invoke(bean, parserJSONArray(jsonArray, nestCls));
}
} return bean;
}catch (Exception e){
// ignore
e.printStackTrace();
}
return null;
} public static <T> List<T> parserJSONArray(JSONArray jsonArray,Class<T> cls){
final int len = jsonArray.length();
List<T> result = Lists.newArrayList();
for(int i = 0; i < len; i++){
final JSONObject jsonObject = jsonArray.optJSONObject(i);
if(jsonObject != null){
result.add(parserJSONObj(jsonObject,cls));
}else{
// 暂时还不知道怎么做
}
}
return result;
}
/**
* 判断object是否是基本类型或者为null
* @param o
* @return
*/
private static boolean primitypeOrNull(Object o){
return o == null || o instanceof Integer || o instanceof Long || o instanceof Float || o instanceof Double || o instanceof String;
}
}测试的Modelpackage com.pplive.androidphone.ui.login.comment_system.model;import java.util.List;/**
* User: youxueliu
* Date: 13-8-22
* Time: 上午10:27
*/
public class Person {
private String name;
private String salary;
private String age; private List<Lover> lovers; public List<Lover> getLovers(){
return lovers;
} public void setLovers(List<Lover> lovers){
this.lovers = lovers;
} public static class Lover{
private String name;
private String age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
}
} public void setName(String name){
this.name = name;
} public void setSalary(String salary){
this.salary = salary;
} public void setAge(String age){
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", salary='" + salary + '\'' +
", age='" + age + '\'' +
'}';
}
}
"name": "liuyx",
"age": 23,
"salary": 23.3,
"lovers": [
{
"name": "zhangweizhen",
"age": 23
},
{
"name": "zhaoushan",
"age": 23
},
{
"name": "huqiong",
"age": 23
}
]
}
JAVA代码:
Lists
public class Lists
{
public static <T> ArrayList<T> newArrayList()
{
return new ArrayList<T>();
}
}
Strings代码public class Strings
{
public static boolean isNullOrEmpty(String s)
{
return s == null || s.equals("");
} public static String nullToEmpty(String s)
{
return s == null ? "" : s;
} /**
* 将字符串首字母大写
* @param src
* @return
*/
public static String capitalize(String src)
{
if(src == null || src.equals("")) return src;
char[] chars = src.toCharArray();
final int len = chars.length;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < len; i++)
{
if(i == 0)
{
char capChar = cap(chars[0]);
sb.append(capChar);
} else{
sb.append(chars[i]);
}
} return sb.toString();
} /**
* 从标准包名获得前缀
* @param canonicalName
* @return
*/
public static String getPrefixPackName(String canonicalName){
String[] strs = canonicalName.split("[.]");
int len = strs.length;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < len - 1; i++){
sb.append(strs[i]).append(".");
}
sb.delete(sb.length()-1,sb.length());
return sb.toString();
} private static char cap(char src)
{
return (char)(src - 32);
}
}
JSONParserUtil——通用JSON解析工具package com.pplive.androidphone.ui.login.comment_system.utils;import com.pplive.android.util.Lists;
import com.pplive.android.util.Strings;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;/**
* User: youxueliu
* Date: 13-8-21
* Time: 下午4:49
*/
public class JSONParserUtil { public static <T> T parser(String json,Class<T> cls){
try{
JSONObject jsonObject = new JSONObject(json);
return parserJSONObj(jsonObject,cls);
}catch (JSONException e){
// ignore
e.printStackTrace();
}
return null;
} private static <T> T parserJSONObj(JSONObject jsonObject,Class<T> cls){
try{
T bean = cls.newInstance();
final Iterator<String> keys = jsonObject.keys();
while(keys.hasNext()){
final String key = keys.next();
final Object obj = jsonObject.opt(key);
Field field = cls.getDeclaredField(key);
final Class<?> fieldType = field.getType();
final String setMethodName = "set" + Strings.capitalize(key);
final Method method = cls.getDeclaredMethod(setMethodName,fieldType);
if(primitypeOrNull(obj))
{
// 属性值默认全部认做String
method.invoke(bean, obj + "");
}else if(obj instanceof JSONObject){
method.invoke(bean, parserJSONObj((JSONObject) obj, fieldType));
}else if(obj instanceof JSONArray){
final String nestClsName = cls.getCanonicalName()+"$"+Strings.capitalize(key.substring(0, key.length() - 1));
final Class<?> nestCls = Class.forName(nestClsName);
final JSONArray jsonArray = (JSONArray)obj;
method.invoke(bean, parserJSONArray(jsonArray, nestCls));
}
} return bean;
}catch (Exception e){
// ignore
e.printStackTrace();
}
return null;
} public static <T> List<T> parserJSONArray(JSONArray jsonArray,Class<T> cls){
final int len = jsonArray.length();
List<T> result = Lists.newArrayList();
for(int i = 0; i < len; i++){
final JSONObject jsonObject = jsonArray.optJSONObject(i);
if(jsonObject != null){
result.add(parserJSONObj(jsonObject,cls));
}else{
// 暂时还不知道怎么做
}
}
return result;
}
/**
* 判断object是否是基本类型或者为null
* @param o
* @return
*/
private static boolean primitypeOrNull(Object o){
return o == null || o instanceof Integer || o instanceof Long || o instanceof Float || o instanceof Double || o instanceof String;
}
}测试的Modelpackage com.pplive.androidphone.ui.login.comment_system.model;import java.util.List;/**
* User: youxueliu
* Date: 13-8-22
* Time: 上午10:27
*/
public class Person {
private String name;
private String salary;
private String age; private List<Lover> lovers; public List<Lover> getLovers(){
return lovers;
} public void setLovers(List<Lover> lovers){
this.lovers = lovers;
} public static class Lover{
private String name;
private String age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
}
} public void setName(String name){
this.name = name;
} public void setSalary(String salary){
this.salary = salary;
} public void setAge(String age){
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", salary='" + salary + '\'' +
", age='" + age + '\'' +
'}';
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货