关于SAXReader解析XML以及JSONObject和JSONArray的使用总结
近来才越来越感到Java知识的匮乏,先是synchronized和多线程管理的卡壳,现在将这几天用到的知识进行总结: 1.用SAXReader解析xml文档 使用SAXReader需要导入dom4j-full.jar包。 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
使用举例: 1. s.xml内容
2.解析
[c-sharp]
copy
从json数组中得到相应java数组,如果要获取java数组中的元素,只需要遍历该数组。 /** * 从json数组中得到相应java数组 * JSONArray下的toArray()方法的使用 * @param str * @return */ public static Object[] getJsonToArray(String str) { JSONArray jsonArray = JSONArray.fromObject(str); return jsonArray.toArray(); } public static void main(String[] args) { JSONArray jsonStrs = new JSONArray(); jsonStrs.add(0,"cat"); jsonStrs.add(1,"dog"); jsonStrs.add(2,"bird"); jsonStrs.add(3,"duck"); Object[] obj=getJsonToArray(jsonStrs.toString()); for(int i=0;i<obj.length;i++){ System.out.println(obj[i]); } } 从json数组中得到java数组,可以对该数组进行转化,如将JSONArray转化为String型、Long型、Double型、Integer型、Date型等等。 分别采用jsonArray下的getString(index)、getLong(index)、getDouble(index)、getInt(index)等方法。 同样,如果要获取java数组中的元素,只需要遍历该数组。
/** * 将json数组转化为Long型 * @param str * @return */ public static Long[] getJsonToLongArray(String str) { JSONArray jsonArray = JSONArray.fromObject(str); Long[] arr=new Long[jsonArray.size()]; for(int i=0;i<jsonArray.size();i++){ arr[i]=jsonArray.getLong(i); System.out.println(arr[i]); } return arr; } /** * 将json数组转化为String型 * @param str * @return */ public static String[] getJsonToStringArray(String str) { JSONArray jsonArray = JSONArray.fromObject(str); String[] arr=new String[jsonArray.size()]; for(int i=0;i<jsonArray.size();i++){ arr[i]=jsonArray.getString(i); System.out.println(arr[i]); } return arr; } /** * 将json数组转化为Double型 * @param str * @return */ public static Double[] getJsonToDoubleArray(String str) { JSONArray jsonArray = JSONArray.fromObject(str); Double[] arr=new Double[jsonArray.size()]; for(int i=0;i<jsonArray.size();i++){ arr[i]=jsonArray.getDouble(i); } return arr; } /** * 将json数组转化为Date型 * @param str * @return */ public static Date[] getJsonToDateArray(String jsonString) { JSONArray jsonArray = JSONArray.fromObject(jsonString); Date[] dateArray = new Date[jsonArray.size()]; String dateString; Date date; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < jsonArray.size(); i++) { dateString = jsonArray.getString(i); try { date=sdf.parse(dateString); dateArray[i] = date; } catch (Exception e) { e.printStackTrace(); } } return dateArray; } public static void main(String[] args) { JSONArray jsonLongs = new JSONArray(); jsonLongs.add(0,"111"); jsonLongs.add(1,"222.25"); jsonLongs.add(2,new Long(333)); jsonLongs.add(3,444); Long[] log=getJsonToLongArray(jsonLongs.toString()); for(int i=0;i<log.length;i++){ System.out.println(log[i]); } JSONArray jsonStrs = new JSONArray(); jsonStrs.add(0,"2011-01-01"); jsonStrs.add(1,"2011-01-03"); jsonStrs.add(2,"2011-01-04 11:11:11"); Date[] d=getJsonToDateArray(jsonStrs.toString()); for(int i=0;i<d.length;i++){ System.out.println(d[i]); } } /*结果如下: * 111 * 222 * 333 * 444 * * Sat Jan 01 00:00:00 CST 2011 * Mon Jan 03 00:00:00 CST 2011 * Tue Jan 04 00:00:00 CST 2011 */ 3. JSONObject与JSONArray的使用 一、JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar 5.ezmorph.jar 6.json-lib-2.2.2-jdk15.jar 二、JSONObject对象使用 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包。在本例中,我们将使用JSONObject类创建JSONObject对象,然后我们打印这些对象的值。为了使用JSONObject对象,我们要引入"net.sf.json"包。为了给对象添加元素,我们要使用put()方法。 import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JSONObjectSample { //创建JSONObject对象 private static JSONObject createJSONObject(){ JSONObject jsonObject = new JSONObject(); jsonObject.put("username","huangwuyi"); jsonObject.put("sex","男"); jsonObject.put("QQ","413425430"); jsonObject.put("Min.score",new Integer(99)); jsonObject.put("nickname","梦中心境"); return jsonObject; } public static void main(String[] args) { JSONObject jsonObject = JSONObjectSample.createJSONObject(); //输出jsonobject对象 System.out.println("jsonObject==>"+jsonObject); //判读输出对象的类型 boolean isArray = jsonObject.isArray(); boolean isEmpty = jsonObject.isEmpty(); boolean isNullObject = jsonObject.isNullObject(); System.out.println("isArray:"+isArray+" isEmpty:"+isEmpty+" isNullObject:"+isNullObject); //添加属性 jsonObject.element("address","北京市海淀区"); System.out.println("添加属性后的对象==>"+jsonObject); //返回一个JSONArray对象 JSONArray jsonArray = new JSONArray(); jsonArray.add(0,"this is a jsonArray value"); jsonArray.add(1,"another jsonArray value"); jsonObject.element("jsonArray",jsonArray); JSONArray array = jsonObject.getJSONArray("jsonArray"); System.out.println("返回一个JSONArray对象:"+array); //添加JSONArray后的值 // {"username":"huangwuyi","sex":"男","QQ":"413425430","Min.score":99,"nickname":"梦中心境","address":"福建省厦门市","jsonArray":["this is a jsonArray value","another jsonArray value"]} System.out.println("结果="+jsonObject); //根据key返回一个字符串 String username = jsonObject.getString("username"); System.out.println("username==>"+username); //把字符转换为 JSONObject String temp=jsonObject.toString(); JSONObject object = JSONObject.fromObject(temp); //转换后根据Key返回值 System.out.println("qq="+object.get("QQ")); } } 没想到一个小小的函数里用到了这么多东西: public synchronized void loadPlayListXml(String base) throws Exception { if(playListDoc==null) { SAXReader reader = new SAXReader(false); playListDoc=reader.read(base+this.getFileName()); String jsTemplate=this.playListDoc.getRootElement().selectSingleNode("templates").getText(); joTemplates=JSONArray.fromObject(jsTemplate); String jsPlayList=this.playListDoc.getRootElement().selectSingleNode("data").getText(); joPlayList=JSONArray.fromObject(jsPlayList); //设置是否循环播放 Element cycle=(Element)this.playListDoc.getRootElement().selectSingleNode("cycle"); if(cycle==null) this.setCycle("1"); else this.setCycle(cycle.getText()); //计算所有模板的播放时长 JSONObject firstTemplate=joPlayList.getJSONObject(0); JSONObject lastTemplate=joPlayList.getJSONObject(joPlayList.size()-1); String startStr=firstTemplate.getString("start"); String endStr=lastTemplate.getString("end"); SimpleDateFormat sdf5=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//yyyy-MM-dd HH:mm:ss Date startD=sdf5.parse(startStr.replace("T"," ")); Date endD=sdf5.parse(endStr.replace("T"," ")); this.setDuring(endD.getTime()-startD.getTime()); //素材列表 List<Element> fileListEls=getPlayListDoc().getRootElement().selectNodes("list/resource"); for(Element fileListEl:fileListEls) { MediaFile mf=new MediaFile(); mf.parseFromXml(fileListEl); mf.playList=this; this.getMediaFiles().put(mf.id,mf); } //背景音乐 Element elMusics=(Element)this.playListDoc.getRootElement().selectSingleNode("musics"); if(elMusics!=null) { List<Element> listMusics=elMusics.selectNodes("music"); for(Element elMusic:listMusics) { MediaFile mf=new MediaFile(); mf.parseFromXml(elMusic); mf.playList=this; this.getMusicFiles().put(mf.id,mf); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |