Java 复杂的Json文件解析为java对象

xiaoxiao2021-02-28  67

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文件就转化为我们的对象了,就可以在我们的程序中使用了,也可以转化为任何的其他结构的文件了。
转载请注明原文地址: https://www.6miu.com/read-72532.html

最新回复(0)