XML和json必须要一个字段一个字段的解析吗 dom4j,sax,jdom,都能解析XML,不用自己写文本解析器。json用jackson,或者google开源的json解析器都是OK的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很简单的数据一般直接读成数据流了 比较格式化的xml文件就用Dom解析吧 很简单的json没怎么用过 看别人用好像也就几行 没感觉 Android 下应该用 Pull,我刚写了一篇博客《Android 下用 Pull 解析和生成 XML》楼主可以看看:http://blog.csdn.net/joneeky/article/details/17080127 我一直在使用这种方式解析,但是由于XML结构很多,需要经常写,定义一个结构,就要写一个,很烦。 json的话jackson gson,xml的话jaxb jaxb和gson都支持直接反序列化吗?而且支持列表吗? 根据放射机制,自己写点代码就好了呀/** * 把json转换成集合 * @param jsonArr 可以是JSONObject对象或json字符串 * @param clazz * @return * @throws Exception */ public <T> List<T> jsonToList(Object jsonArr, Class clazz) throws Exception { List list = new ArrayList(); JSONArray json = (jsonArr instanceof JSONArray ? (JSONArray) jsonArr : new JSONArray(jsonArr.toString())); for (int i = 0; i < json.length(); i++) { list.add(jsonToBean(json.get(i), clazz)); } return list; }/** * 把json转换成对象 * @param jsonObj 可以是JSONObject对象或json字符串 * @param clazz * @return * @throws Exception */ public <T> T jsonToBean(Object jsonObj, Class clazz) throws Exception { JSONObject json = (jsonObj instanceof JSONObject ? (JSONObject) jsonObj : new JSONObject(jsonObj.toString())); Object object = clazz.newInstance();Method[] methods = clazz.getMethods(); for (int i = 0; i < methods.length; i++) { Object value = null;try {value = json.get(getProp(methods[i]));} catch (Exception e) {} setProp(methods[i], object, value); } return (T) object; }/** * 给对象的属性赋值 * @param method * @param object * @param value * @return */ public Object setProp(Method method, Object object, Object value) { if (null == method || null == object || null == value || !isPropMethod(method, SET_PROP)) {return object;} String pn = method.getParameterTypes()[0].getName(), val = value.toString(); if (pn.equals("short") || pn.equals(Short.class.getName())) { try {method.invoke(object, Short.parseShort(val));} catch (Exception e) {} } else if (pn.equals("int") || pn.equals(Integer.class.getName())) { try {method.invoke(object, Integer.parseInt(val));} catch (Exception e) {} } else if (pn.equals("long") || pn.equals(Long.class.getName())) { try {method.invoke(object, Long.parseLong(val));} catch (Exception e) {} } else if (pn.equals(String.class.getName())) { try {method.invoke(object, val);} catch (Exception e) {} } else if (pn.equals("float") || pn.equals(Float.class.getName())) { try {method.invoke(object, Float.parseFloat(val));} catch (Exception e) {} } else if (pn.equals("double") || pn.equals(Double.class.getName())) { try {method.invoke(object, Double.parseDouble(val));} catch (Exception e) {} } else if (pn.equals(BigDecimal.class.getName())) { try {method.invoke(object, new BigDecimal(val));} catch (Exception e) {} } else if (pn.equals("boolean") || pn.equals(Boolean.class.getName())) { try {method.invoke(object, "1".equals(val) ? true : ("0".equals(val) ? false : Boolean.parseBoolean(val)));} catch (Exception e) {} } else if (pn.equals(Date.class.getName())) { try { if (value.getClass().getName().equals(Date.class.getName())) { method.invoke(object, value); } else { method.invoke(object, val.length() <= 10 ? DateUtil.get().formatDate().parse(val) : DateUtil.get().formatDateTime().parse(val)); } } catch (Exception e) {} } else if (pn.equals(Map.class.getName())) { try {method.invoke(object, jsonToMap(value));} catch (Exception e) {} } return object; }/** * 根据set或get方法获得属性名称 * @param method * @return */ public String getProp(Method method) { if (isPropMethod(method, SET_PROP) || isPropMethod(method, GET_PROP)) { String mn = method.getName(); return mn.substring(3, 4).toLowerCase() + mn.substring(4, mn.length()); } return ""; } android怎么把一个view放入xml中 decor view & viewroot指的是什么? 跪求Android中ListView设计原理分析 ARM和凌动的应用范围、还有各自优势,区别~~~~?????????? 不同屏幕适配 公司让自己写个项目策划书, android handler 同时处理多条消息 看到很多软件在一张图片上不同区域实现点击效果,是怎么做的 如果用代码关闭自带的浏览器? lruCache取不到缓存问题 如何在动态创建的图片(Imageview)得到Imageview的R android点击按钮后,按钮外部发光,并成漂浮状态
json没怎么用过 看别人用好像也就几行 没感觉
楼主可以看看:http://blog.csdn.net/joneeky/article/details/17080127
/**
* 把json转换成集合
* @param jsonArr 可以是JSONObject对象或json字符串
* @param clazz
* @return
* @throws Exception
*/
public <T> List<T> jsonToList(Object jsonArr, Class clazz) throws Exception {
List list = new ArrayList();
JSONArray json = (jsonArr instanceof JSONArray ? (JSONArray) jsonArr : new JSONArray(jsonArr.toString()));
for (int i = 0; i < json.length(); i++) {
list.add(jsonToBean(json.get(i), clazz));
}
return list;
}/**
* 把json转换成对象
* @param jsonObj 可以是JSONObject对象或json字符串
* @param clazz
* @return
* @throws Exception
*/
public <T> T jsonToBean(Object jsonObj, Class clazz) throws Exception {
JSONObject json = (jsonObj instanceof JSONObject ? (JSONObject) jsonObj : new JSONObject(jsonObj.toString()));
Object object = clazz.newInstance();Method[] methods = clazz.getMethods();
for (int i = 0; i < methods.length; i++) {
Object value = null;try {value = json.get(getProp(methods[i]));} catch (Exception e) {}
setProp(methods[i], object, value);
}
return (T) object;
}
/**
* 给对象的属性赋值
* @param method
* @param object
* @param value
* @return
*/
public Object setProp(Method method, Object object, Object value) {
if (null == method || null == object || null == value || !isPropMethod(method, SET_PROP)) {return object;}
String pn = method.getParameterTypes()[0].getName(), val = value.toString();
if (pn.equals("short") || pn.equals(Short.class.getName())) {
try {method.invoke(object, Short.parseShort(val));} catch (Exception e) {}
} else if (pn.equals("int") || pn.equals(Integer.class.getName())) {
try {method.invoke(object, Integer.parseInt(val));} catch (Exception e) {}
} else if (pn.equals("long") || pn.equals(Long.class.getName())) {
try {method.invoke(object, Long.parseLong(val));} catch (Exception e) {}
} else if (pn.equals(String.class.getName())) {
try {method.invoke(object, val);} catch (Exception e) {}
} else if (pn.equals("float") || pn.equals(Float.class.getName())) {
try {method.invoke(object, Float.parseFloat(val));} catch (Exception e) {}
} else if (pn.equals("double") || pn.equals(Double.class.getName())) {
try {method.invoke(object, Double.parseDouble(val));} catch (Exception e) {}
} else if (pn.equals(BigDecimal.class.getName())) {
try {method.invoke(object, new BigDecimal(val));} catch (Exception e) {}
} else if (pn.equals("boolean") || pn.equals(Boolean.class.getName())) {
try {method.invoke(object, "1".equals(val) ? true : ("0".equals(val) ? false : Boolean.parseBoolean(val)));} catch (Exception e) {}
} else if (pn.equals(Date.class.getName())) {
try {
if (value.getClass().getName().equals(Date.class.getName())) {
method.invoke(object, value);
} else {
method.invoke(object, val.length() <= 10 ? DateUtil.get().formatDate().parse(val) : DateUtil.get().formatDateTime().parse(val));
}
} catch (Exception e) {}
} else if (pn.equals(Map.class.getName())) {
try {method.invoke(object, jsonToMap(value));} catch (Exception e) {}
}
return object;
}
/**
* 根据set或get方法获得属性名称
* @param method
* @return
*/
public String getProp(Method method) {
if (isPropMethod(method, SET_PROP) || isPropMethod(method, GET_PROP)) {
String mn = method.getName();
return mn.substring(3, 4).toLowerCase() + mn.substring(4, mn.length());
}
return "";
}