2017-02-20 17 views
-1

下面是我的JSON格式代碼:如何讀取一個JSON響應鍵名不區分大小寫

{ 
    "topic": "Employee", 
    "message": { 
     "Id": "IND01", 
     "data": { 
      "salary": 50000 
     } 
    } 
} 

topicmessageIddata鍵名稱將被解讀爲不區分大小寫。我怎樣才能從這個JSON響應體獲取鍵?

+0

你應該嘗試重新制定你的問題作爲一個實際的問題。 –

+0

你是不是清楚你的問題 –

+0

-1從我這裏。你的問題沒有很好的表達,清晰甚至是可行的JSON字符串。快速回答的可能性與問題的清晰度成正比。 –

回答

1

首先你JSON是不是vaild.I相信這是你的問題,它會解決你的其他問題。 嘗試

{ 
    "topic": "Employee", 
    "message": { 
     "Id ": "IND01", 
     "data ": { 

      "salary ": 50000 
     } 
    } 
} 

這是你的case.Henceforth學習JSON的正確格式和使用任何JSON驗證器來驗證您的JSON有效JSON。

0

如果您可以將您的JSON轉換成地圖,你可以重新映射整個地圖(遞歸)轉化每個鍵的小寫值。

喜歡的東西:

public static Map<String,Object> convertToLowerCaseKeys(Map<String,Object> map){ 
    return map.entrySet().stream().collect(Collectors.toMap(e -> e.getKey().toLowerCase(), e -> { 
     if(e.getValue() != null && e.getValue() instanceof Map){ 
      return convertToLowerCaseKeys((Map<String,Object>)e.getValue()); 
     } 
     return e.getValue(); 
    })); 
} 

注意,投給地圖可能是有點過於草率,但我已經與它的簡單性。

編輯:

要搜索(頂級)鍵,同時不區分大小寫:

public static Object getCaseInsensitive(Map<String,Object> map, String key){ 
    if(key == null){ 
     return map.get(null); 
    } 
    Optional<String> optional = map.keySet().stream().filter(e -> e != null && e.toLowerCase().equals(key.toLowerCase())).findAny(); 
    if(optional.isPresent()){ 
     return map.get(optional.get()); 
    } 
    return null; 
} 
+0

如何讀取特定的鍵名不區分大小寫? – Raksh

+0

檢查轉換爲小寫字母的實際密鑰與您要測試的密鑰之間的等同性是否也轉換爲小寫 –

+0

請您詳細說明答案@Jeremy Grand – Raksh