色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

201709-3json查詢

林雅南2年前8瀏覽0評論

JSON是一種輕量級數據交換格式,由于其簡單、易讀、易寫,越來越多的應用程序采用了JSON格式來進行數據傳輸。在2017年9月的PAT考試中,出現了關于JSON查詢的題目,讓我們來探討一下。

JSON查詢主要是在一串JSON字符串中找到符合條件的數據。在這個題目中,我們需要實現兩個操作:

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

為了實現上述兩個操作,我們需要將JSON字符串轉化為JSON對象,然后再根據需要完成查詢操作。下面是一份參考代碼:

// 將JSON字符串轉化為JSON對象
JSONObject object = new JSONObject(jsonString);
String[] query = scanner.nextLine().split("\\.");
// 判斷需要查詢的是哪個操作
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類和JSONArray類來完成操作。需要注意的是,在查詢OBJ.*操作時,需要先判斷對象是否為空,否則會出現空指針異常。