在Java中遞歸輪詢json和值路徑是一種常見的操作。本文將探討如何使用Java中的遞歸函數來遍歷json對象,并查找特定的值路徑。
public static void recursiveTraversal(JSONObject jsonObj, String keyPath, String value) { for (String key : jsonObj.keySet()) { Object obj = jsonObj.get(key); if (obj instanceof JSONObject) { recursiveTraversal((JSONObject) obj, keyPath + "." + key, value); } else if (obj instanceof JSONArray) { JSONArray arr = (JSONArray) obj; for (int i = 0; i< arr.length(); i++) { recursiveTraversal(arr.getJSONObject(i), keyPath + "." + key + "[" + i + "]", value); } } else { if (key.equals(keyPath) && obj.equals(value)) { System.out.println(keyPath + " = " + value); } } } }
上述代碼中的遞歸函數將逐層遍歷json對象,對于每個對象,通過判斷其是否為JSONObject或JSONArray,再進行遞歸調用或循環調用,直到找到特定的值路徑。對于找到的值路徑,我們可以將其打印出來或進行其他相應的處理。
下面我們以一個簡單的json字符串作為例子:
{ "name": "John", "age": 30, "address": { "city": "New York", "state": "NY", "zip": "10001" }, "phoneNumbers": [ { "type": "home", "number": "555-555-5555" }, { "type": "work", "number": "444-444-4444" } ] }
我們想要查找值路徑為address.city的具體值,可以這樣調用遞歸函數:
JSONObject jsonObj = new JSONObject(jsonStr); recursiveTraversal(jsonObj, "address.city", null);
同樣,如果我們想要查找值路徑為phoneNumbers[0].number的具體值,可以這樣調用遞歸函數:
recursiveTraversal(jsonObj, "phoneNumbers[0].number", null);
上述代碼中的第三個參數為null,表示我們只需要查找值路徑對應的具體值,不需要進行其他處理。當然,如果有需要,我們也可以在遞歸函數中添加相應的操作。