欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

201709-3json查詢

JSON是一種輕量級(jí)數(shù)據(jù)交換格式,由于其簡(jiǎn)單、易讀、易寫(xiě),越來(lái)越多的應(yīng)用程序采用了JSON格式來(lái)進(jìn)行數(shù)據(jù)傳輸。在2017年9月的PAT考試中,出現(xiàn)了關(guān)于JSON查詢的題目,讓我們來(lái)探討一下。

JSON查詢主要是在一串JSON字符串中找到符合條件的數(shù)據(jù)。在這個(gè)題目中,我們需要實(shí)現(xiàn)兩個(gè)操作:

OBJ.NAME 查找OBJ的NAME屬性的值,對(duì)于多層嵌套的情況,用"."連接嵌套的屬性名,比如查詢school.teacher.name屬性的值,就寫(xiě)成school.teacher.name。OBJ.* 返回OBJ的所有一級(jí)屬性和值,格式為ATTR1:VALUE1, ATTR2:VALUE2, ...,屬性名和屬性值之間用英文冒號(hào)隔開(kāi),不同屬性之間用英文逗號(hào)隔開(kāi)。如果OBJ沒(méi)有屬性,則輸出NO OBJECT。

為了實(shí)現(xiàn)上述兩個(gè)操作,我們需要將JSON字符串轉(zhuǎn)化為JSON對(duì)象,然后再根據(jù)需要完成查詢操作。下面是一份參考代碼:

// 將JSON字符串轉(zhuǎn)化為JSON對(duì)象
JSONObject object = new JSONObject(jsonString);
String[] query = scanner.nextLine().split("\\.");
// 判斷需要查詢的是哪個(gè)操作
if (query.length == 1) {
JSONObject attr = object.optJSONObject(query[0]);
if (attr != null) {
System.out.println(attr.toString().replaceAll("[\":{},]", ""));
} else {
System.out.println("NOTEXIST");
}
} else {
JSONObject queryObject = object;
String key = null;
for (int i = 0; i< query.length; i++) {
if (i == query.length - 1) {
key = query[i];
} else {
JSONObject temp = queryObject.optJSONObject(query[i]);
if (temp == null) {
System.out.println("NOTEXIST");
return;
} else {
queryObject = temp;
}
}
}
if (queryObject != null && key != null) {
Object value = queryObject.opt(key);
if (value != null) {
if (value instanceof JSONObject || value instanceof JSONArray) {
System.out.println("OBJECT");
} else {
System.out.println("STRING:" + value);
}
} else {
System.out.println("NOTEXIST");
}
} else {
System.out.println("NOTEXIST");
}
}

以上代碼主要使用了JSON提供的JSONObject類(lèi)和JSONArray類(lèi)來(lái)完成操作。需要注意的是,在查詢OBJ.*操作時(shí),需要先判斷對(duì)象是否為空,否則會(huì)出現(xiàn)空指針異常。