Json类对象主要有JsonObject和JsonArray两种格式,对一个复杂json对象的解析一定要先理清其中的关系,比如那里该用到对象,那里是数组。
下面是一个较为复杂的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文件就转化为我们的对象了,就可以在我们的程序中使用了,也可以转化为任何的其他结构的文件了。