Json类对象主要有JsonObject和JsonArray两种格式,对一个复杂json对象的解析一定要先理清其中的关系,比如那里该用到对象,那里是数组。


下面是一个较为复杂的Json文件的处理过程。该json文件的大致构成如下:






java 中复杂类型数据结构 java处理复杂json数据_json




本文件是有很多的会议安排组成的,而每一个会议安排里又有内容,内容又进一步细分为items数组,items数组里又有article数组,所以可以看做一个较为复杂的json文件了




废话不多说,上代码, 与以往解析文件一样,先根据要求创建对象。




代码如下:


1.Article.java


package jsonToXml;

public class Article {
	private String sequence;
	private String inTitle;
	private String authors;
	private String fileName;
	
	public Article(String sequence1,String inTitle1,String authors1,String fileName1){
		this.sequence=sequence1;
		this.inTitle=inTitle1;
		this.authors=authors1;
		this.fileName=fileName1;
	}
	public String getSequence() {
		return sequence;
	}
	public void setSequence(String sequence) {
		this.sequence = sequence;
	}
	public String getInTitle() {
		return inTitle;
	}
	public void setInTitle(String inTitle) {
		this.inTitle = inTitle;
	}
	public String getAuthors() {
		return authors;
	}
	public void setAuthors(String authors) {
		this.authors = authors;
	}
	public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	

}


2. Items.Java


package jsonToXml;

import java.util.ArrayList;
import java.util.List;

public class Items {
	private String title;
	private String desc;
	private String map;
	private List<Article> article=new ArrayList<Article>();
	
	public Items(String title1,String desc1, String map1, List<Article> article1){
		this.title=title1;
		this.desc=desc1;
		this.map=map1;
		this.article=article1;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public String getMap() {
		return map;
	}
	public void setMap(String map) {
		this.map = map;
	}
	public List<Article> getArticle() {
		return article;
	}
	public void setArticle(List<Article> article) {
		this.article = article;
	}
	

}


3.Conference.java


package jsonToXml;

import java.util.ArrayList;
import java.util.List;

public class Conference {
	private String date;
	private String time;
	private List<Items> items=new ArrayList<Items>();
	
	public Conference(String date1,String time1,List<Items> items1){
		this.date=date1;
		this.time=time1;
		this.items=items1;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public String getTime() {
		return time;
	}
	public void setTime(String time) {
		this.time = time;
	}
	public List<Items> getItems() {
		return items;
	}
	public void setItems(List<Items> items) {
		this.items = items;
	}
	
}




这里需要导入处理json的包,我这里用到的是org.json.jar。


4.处理json转化为list数组的函数:


public static List<Conference> readJson(File f) {
		List<Conference> conList = new ArrayList<Conference>();
		BufferedReader br = null;
		String s = "";
		try {
			br = new BufferedReader(new FileReader(f));
			String sl = null;
			while ((sl = br.readLine()) != null) {
				s = s + sl;
			}
			System.out.println(s);
			try {
				JSONArray jsonArr = new JSONArray(s);

				List<Items> itemList;
				List<Article> artList;
				for (int i = 0; i < jsonArr.length(); i++) {
					JSONObject jo = jsonArr.optJSONObject(i);
					String date = jo.optString("date");
					String time = jo.optString("time");
					JSONArray items = jo.getJSONArray("items");
					itemList = new ArrayList<Items>();
					for (int j = 0; j < items.length(); j++) {
						JSONObject item = items.getJSONObject(j);
						String title = item.optString("title");
						String desc = item.optString("desc");
						String map = item.optString("map");
						if (item.optString("article").equals("")) {
							artList = new ArrayList<Article>();
							artList.add(new Article("", "", "", ""));
						} else {
							JSONArray articles = item.getJSONArray("article");
							artList = new ArrayList<Article>();
							for (int k = 0; k < articles.length(); k++) {

								JSONObject article = articles.getJSONObject(k);
								String sequence = article.optString("sequence");
								String inTitle = article.optString("title");
								String authors = article.optString("authors");
								String fileName = article.optString("fileName");
								artList.add(new Article(sequence, inTitle, authors, fileName));
							}
						}
						itemList.add(new Items(title, desc, map, artList));
					}
					conList.add(new Conference(date, time, itemList));

				}
			} catch (JSONException e) {
				e.printStackTrace();
			}

			br.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return conList;
	}





    完成上述过程后,json文件就转化为我们的对象了,就可以在我们的程序中使用了,也可以转化为任何的其他结构的文件了。