XML和json必须要一个字段一个字段的解析吗,该如何解决
XML和json必须要一个字段一个字段的解析吗
大家好,我们平时定义协议的时候,喜欢把数据流定义成XML或者json格式,解析的时候,必须要一个字段一个字段的解析吗?
有没有好一点的解析工具,直接序列化或者反序列化?
------解决方案--------------------
dom4j,sax,jdom,都能解析XML,不用自己写文本解析器。
json用jackson,或者google开源的json解析器都是OK的。
------解决方案--------------------
很简单的数据一般直接读成数据流了 比较格式化的xml文件就用Dom解析吧 很简单的
json没怎么用过 看别人用好像也就几行 没感觉
------解决方案--------------------
Dom效率还是蛮高的
------解决方案--------------------
Android 下应该用 Pull,我刚写了一篇博客《Android 下用 Pull 解析和生成 XML》
楼主可以看看:http://blog.****.net/joneeky/article/details/17080127
------解决方案--------------------
json的话jackson gson,xml的话jaxb
------解决方案--------------------
根据放射机制,自己写点代码就好了呀
大家好,我们平时定义协议的时候,喜欢把数据流定义成XML或者json格式,解析的时候,必须要一个字段一个字段的解析吗?
有没有好一点的解析工具,直接序列化或者反序列化?
------解决方案--------------------
dom4j,sax,jdom,都能解析XML,不用自己写文本解析器。
json用jackson,或者google开源的json解析器都是OK的。
------解决方案--------------------
很简单的数据一般直接读成数据流了 比较格式化的xml文件就用Dom解析吧 很简单的
json没怎么用过 看别人用好像也就几行 没感觉
------解决方案--------------------
Dom效率还是蛮高的
------解决方案--------------------
Android 下应该用 Pull,我刚写了一篇博客《Android 下用 Pull 解析和生成 XML》
楼主可以看看:http://blog.****.net/joneeky/article/details/17080127
------解决方案--------------------
json的话jackson gson,xml的话jaxb
------解决方案--------------------
根据放射机制,自己写点代码就好了呀
/**
* 把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())) {