2017-02-20 46 views
-1

以下は私のJSON形式のコードです:そのようtopicmessageIddataなど大文字と小文字を区別しないでJSONレスポンスからキーの名前の読み方を

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

キー名は大文字と小文字を区別しないとして読み込まれます。このjsonレスポンスボディからどのようにキーを取得できますか?

+0

をあなたは実際の質問とあなたの質問を再公式化しようとする必要があります。 –

+0

私の質問 –

+0

-1については明確ではありません。あなたの質問はうまく提示されていません、明確な、または実行可能なJSON文字列です。クイックアンサーの確率は、質問の明確さに比例します。 –

答えて

1

まず、あなたのJSONはvaildではありません。私はそれがあなたの質問であり、あなたの他の問題を解決すると信じています。 これはあなたのcase.Henceforthで有効なJSON JSONの正しい形式を学び、あなたのJSONを検証するために、任意のJSONバリデータを使用している

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

      "salary ": 50000 
     } 
    } 
} 

を試してみてください。

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(); 
    })); 
} 

注意。

EDIT:

(トップレベル)を検索するためのキー大文字と小文字を区別しながら:

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

関連する問題