解析json串

    使用java進行網頁抓取時,有時會直接獲取到json串,json串要獲取的數據嵌套複雜,這裏自己寫一個遞歸的方式進行解析指定名稱的數據,進行記錄,以便日後複用。

    原有json串:

{
	"total": 3,
	"class": "二年級",
	"members": [{
		"age": 18,
		"name": "張三",
		"course":[{
			"Chinese":"123",
		  	"Maths":"121",
		  	"English":"110"
		}]
	}, {
		"age": 19,
		"name": "李四",
		"course":[{
			"Chinese":"118",
		  	"Maths":"129",
		  	"English":"130"
		}]
	}, {
		"age": 18,
		"name": "王麻子",
		"course":[{
			"Chinese":"133",
		  	"Maths":"111",
		  	"English":"134"
		}]
	}]
}

    java遞歸解析方法:

import org.json.JSONObject;
import org.json.JSONArray;

/**
 * 
 * @param returnObject 返回的數據List
 * @param object 傳入的json串
 * @param keys 需要解析的節點數組,按順序組成數組
 * @param index index==keys.length爲基線條件,index起始爲0
 */
private static void getData(List<Object> returnObject,Object object,String[] keys,int index){
    if (index==keys.length){
        returnObject.add(object);
        return;
    }
    if (object instanceof JSONObject){
        if (!((JSONObject) object).has(keys[index])){
            return ;
        }
        Object object1=((JSONObject) object).get(keys[index]);
        getData(returnObject,object1,keys,index+1);
    } else if (object instanceof JSONArray){
        JSONArray jsonArray=(JSONArray) object;
        for (Object jsonObject:jsonArray){
            getData(returnObject,jsonObject,keys,index);
        }
    }
}

    遞歸調用方法:

public static void main(String[] args) {
    String jsonStr="{\n" +
            "\t\"total\": 3,\n" +
            "\t\"class\": \"二年級\",\n" +
            "\t\"members\": [{\n" +
            "\t\t\"age\": 18,\n" +
            "\t\t\"name\": \"張三\",\n" +
            "\t\t\"course\":[{\n" +
            "\t\t\t\"Chinese\":\"123\",\n" +
            "\t\t  \t\"Maths\":\"121\",\n" +
            "\t\t  \t\"English\":\"110\"\n" +
            "\t\t}]\n" +
            "\t}, {\n" +
            "\t\t\"age\": 19,\n" +
            "\t\t\"name\": \"李四\",\n" +
            "\t\t\"course\":[{\n" +
            "\t\t\t\"Chinese\":\"118\",\n" +
            "\t\t  \t\"Maths\":\"129\",\n" +
            "\t\t  \t\"English\":\"130\"\n" +
            "\t\t}]\n" +
            "\t}, {\n" +
            "\t\t\"age\": 18,\n" +
            "\t\t\"name\": \"王麻子\",\n" +
            "\t\t\"course\":[{\n" +
            "\t\t\t\"Chinese\":\"133\",\n" +
            "\t\t  \t\"Maths\":\"111\",\n" +
            "\t\t  \t\"English\":\"134\"\n" +
            "\t\t}]\n" +
            "\t}]\n" +
            "}";
    List<Object> returnObject=new ArrayList<>();
    getData(returnObject,new JSONObject(jsonStr),"members,course".split(","),0);
    System.out.println(returnObject);
    returnObject=new ArrayList<>();
    getData(returnObject,new JSONObject(jsonStr),"members,course,Chinese".split(","),0);
    System.out.println(returnObject);
}
輸出結果:
[[{"Maths":"121","English":"110","Chinese":"123"}], [{"Maths":"129","English":"130","Chinese":"118"}], [{"Maths":"111","English":"134","Chinese":"133"}]]
[123, 118, 133]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章