2017-04-23 31 views
0
{ 
    "empId":"1", 
    "name":"Alex", 
    "role":"president", 
    "phone":"123", 
    "address": { 
     "street":"xyz", 
     "city":"hyd", 
     "pincode":40
    } 
} 

我想檢索以下密鑰,以便我可以允許用戶在UI中選擇此類密鑰。我們如何從JSON文檔中檢索所有密鑰及其前綴

keys: ["empId","name","role","phone", "address", "address.street", "address.city", 
"address.pincode"] 

同樣可以用於直接在Mongo上查詢。我嘗試使用JSONObject並獲取密鑰,但我無法獲取文檔以及它們來自的路徑。

請讓或者我知道,如果有一個直接的方法,我可以在Java中使用,如果蒙戈有一種方式來獲得所有鑰匙,他們是來

回答

0

您可以創建額外的陣列,推動所有密鑰數組英寸

使用JSON.Stringyfy函數將其作爲字符串呈現給最終用戶。

var keys = [], 

sourceArray = [{ 
    "empId":"1", 
    "name":"Alex", 
    "role":"president", 
    "phone":"123", 
    "address": { 
     "street":"xyz", 
     "city":"hyd", 
     "pincode":40
    } 
}]; //Test data 

$.each(sourceArray, function(k, v) { 
    //k is the key and v is the value (key-value pair) 
    keys.push(k); 
}); 

//You have all the keys - use at your disposal 

注:我沒有測試在沒有源代碼的代碼,請驗證和修改,按您的實際代碼。

+0

我可以直接從嵌套的JSON對象中直接獲取所有的鍵值,但是我也想保留它們的父鍵值。例如:{「a」:「aval」,「b」:「bval」,「c」:{「d」:「dval」,「e」:「eval」},我希望這些鍵是[a ,b,c,cd,ce]而不是[a,b,c,d,e] –

1

你可以使用遞歸來做到這一點。

下面是一個例子:

public static void main(String[] args) throws ParseException { 
    String str = "{ \"empId\":\"1\", \"name\":\"Alex\", \"role\":\"president\", \"phone\":\"123\", \"address\": { \"street\":\"xyz\", \"city\":\"hyd\", \"pincode\":40}}"; 
    JSONObject obj = (JSONObject) new JSONParser().parse(str); 
    List<String> keysList = new ArrayList<>(); 
    recLevels(keysList, obj, ""); 
    System.out.println(keysList); 
} 

public static void recLevels(List<String> keysList, JSONObject obj, String prefix) { 
    Set<String> keys = (Set<String>) obj.keySet(); 
    for (String key : keys) { 
     keysList.add(prefix + (prefix.isEmpty() ? "" : ".") + key); 
     if (obj.get(key) instanceof JSONObject) { 
      recLevels(keysList, (JSONObject) obj.get(key), prefix + (prefix.isEmpty() ? "" : ".") + key); 
     } 
    } 
} 

recLevels方法做什麼是要經過一個對象的所有鍵和檢查任何鍵都有一個對象作爲它的價值if (obj.get(key) instanceof JSONObject),如果它recLevels對該對象再次被調用,並且對該對象重複該過程(向下一級)。

這裏的重要部分是prefix變量,用於存儲以前級別上的以前的鍵。

+0

謝謝!我只是在嘗試遞歸,但我無法在遞歸調用方法時分配正確的前綴。那裏出錯了 –

相關問題