json陣列的解析

Jike五點半,每天五點半進步一點點。

json陣列的解析

今天我來寫一個比較原始和基礎的json陣列的解析方式,下一篇我將介紹json和javabean之間的轉化 話不多說了開始了

一直以來,經常會遇到json資料從前端或者我經常從網站上爬取的資料中會有json資料的存在,這樣如果想要獲取json資料就需要對json資料進行解析。

在開發過程中,經常需要和別的系統交換資料,資料交換的格式有XML、JSON等,JSON作為一個輕量級的資料格式比xml效率要高,XML需要很多的標籤,這無疑佔據了網路流量,JSON在這方面則做的很好,下面先看下JSON的格式。

JSON可以有兩種格式:

一種是物件格式的,另一種是陣列物件,

{“name”:“JSON”,“address”:“北京市西城區”,“age”:25}//JSON的物件格式的字串

[{“name”:“JSON”,“address”:“北京市西城區”,“age”:25}]//資料物件格式

從上面的兩種格式可以看出物件格式和陣列物件格式唯一的不同則是在物件格式的基礎上加上了[],再來看具體的結構,可以看出都是以鍵值對的形式出現的,中間以英文狀態下的逗號(,)分隔。

在前端和後端進行資料傳輸的時候這種格式也是很受歡迎的,後端返回json格式的字串,前臺使用js中的JSON.parse()方法把JSON字串解析為json物件,然後進行遍歷,供前端使用。

下面我用的是java語言解析json資料的

解析資料前需要引入一個包

json陣列的解析

可以到http://mvnrepository。com/artifact/edu。uci。ics這裡下載相應的jar包

public class JsonToObject { /**解析json字串最外面是[]的情況 * [{“rating”:[“9。6”,“50”],“rank”:1},{“rating”:[“9。6”,“50”],“rank”:2}] * @throws Exception */ public List> toMapOne(String jsonString)throws Exception{ //第一步是將最外面一層的陣列解析去掉,得到所有的json串 JSONArray jsons = JSONArray。fromObject(jsonString); List> nodes = new ArrayList>(); //迴圈遍歷所有的json子串 for (Object o : jsons) { JSONObject jsonNode = JSONObject。fromObject(o); Map treeNodes = new HashMap(); String rating = “”; JSONArray ratingArray = JSONArray。fromObject(jsonNode。getString(“rating”)。trim()); for(Object ob : ratingArray) { rating += ob。toString()+“,”; } treeNodes。put(“rating”,rating); treeNodes。put(“rank”,jsonNode。getString(“rank”)。trim()); nodes。add(treeNodes); } return nodes; } /**解析json字串最外面是{}的情況 * {“data”:[{“directors”:[“普特鵬·普羅薩卡·那·薩克那卡林”,“華森·波克彭”],“rate”:“8。3”},{“directors”:[“大衛·芬奇”],“rate”:“8。7”}]} * @throws Exception */ public List> toMapTwo(String jsonString)throws Exception{ //首先將jsonString字串轉化為jsonObject JSONObject jsonNode = JSONObject。fromObject(jsonString); //然後獲取json中data的值 JSONArray jsonArray = JSONArray。fromObject(jsonNode。getString(“data”)); List> nodes = new ArrayList>(); //遍歷data裡邊的值 for (Object object : jsonArray) { JSONObject jsonNode2 = JSONObject。fromObject(object); Map treeNodes = new HashMap(); treeNodes。put(“directors”,jsonNode2。getString(“directors”)); treeNodes。put(“rate”,jsonNode2。getString(“rate”)。trim()); nodes。add(treeNodes); } return nodes; } public static void main(String[] args) throws Exception { String jsonString = “[{\”rating\“:[\”9。6\“,\”50\“],\”rank\“:1},{\”rating\“:[\”9。6\“,\”50\“],\”rank\“:2}]”; String jsonString2 = “{\”data\“:[{\”directors\“:[\”普特鵬·普羅薩卡·那·薩克那卡林\“,\”華森·波克彭\“],\”rate\“:\”8。3\“},{\”directors\“:[\”大衛·芬奇\“],\”rate\“:\”8。7\“}]}”; JsonToObject jo = new JsonToObject(); List> listMap = jo。toMapOne(jsonString); List> listMap2 = jo。toMapTwo(jsonString2); //上面獲取到了json的資料並且封裝到list集合中去,並且list //裡面封裝的是map集合 for (Map map : listMap) { String rating = map。get(“rating”); String rank = map。get(“rank”); System。out。println(“rating: ”+rating); System。out。println(“rank: ”+rank); } for (Map map : listMap2) { String directors = map。get(“directors”); String rate = map。get(“rate”); System。out。println(“directors: ”+directors); System。out。println(“rate: ”+rate); } }}

執行的結果:

對於toMapOne裡的函式除錯的變數值情況:

json陣列的解析

json陣列的解析

json陣列的解析