关于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内容
- <?xmlversion="1.0"encoding="GB2312"?>
- <data>
- rowqueryDTO.enterpriseId="gfd"queryDTO.loginName="gdfg"queryDTO.state="0"/>
- </>
2.解析
importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.FileNotFoundException;
- importjava.util.Iterator;
- importjava.util.List;
- importorg.dom4j.Document;
- importorg.dom4j.DocumentException;
- importorg.dom4j.Element;
- importorg.dom4j.io.SAXReader;
- importorg.dom4j.tree.AbstractAttribute;
-
- publicclassReadXMLTest{
- staticvoidmain(String[]args){
- FilexmlFile=newFile("C:/s.xml");
- FileInputStreamfis=null;
- try{
- fis=newFileInputStream(xmlFile);
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- System.err.println("Fileisnotexsit!");
- }
- SAXReadersaxReader=newSAXReader();
- ListrowList=null;
- try{
-
- Documentdoc=saxReader.read(fis);
- //获取指定路径下的元素列表,这里指获取所有的data下的row元素
- rowList=doc.selectNodes("//data/row");
- catch(DocumentExceptione){
- }
-
- for(Iteratoriter=rowList.iterator();iter.hasNext();){
- //获得具体的row元素
- Elementelement=(Element)iter.next();
- //获得row元素的所有属性列表
- ListelementList=element.attributes();
- for(Iteratoriter1=elementList.iterator();iter1.hasNext();){
-
- AbstractAttributeaa=(AbstractAttribute)iter1.next();
- System.out.println("Name:"+aa.getName()+";Value:"+aa.getValue());
- //输出:
- //Name:queryDTO.enterpriseId;Value:gfd
- //Name:queryDTO.loginName;Value:gdfg
- //Name:queryDTO.state;Value:0
- out.println(element.getName());
- //输出:
- //row
- //取得row元素的queryDTO.enterpriseId属性的值
- out.println(element.attributeValue("queryDTO.enterpriseId"));
- //gfd
- //如果element下有子元素,(类似width="**"),要想获得该子元素的值,可以用如下方法
- out.println(element.elementText("width"));
- }
2.
JSONArray的应用
从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);
}
}
}
}