2017-09-11 8 views
0

キーが不明な場合にJSONをStringにマップできますか?ここで私はAPIのために得るJSONです:Spring:JSONキーが不明なときにJSONをStringにマップする

{ 
    "key1.abc": "Some translation", 
    "key2.abc": "Some other translation", 
... 
} 

次のように私が試した:

ResponseEntity<String> responseEntity = restTemplate.exchange(uri, HttpMethod.GET, requestEntity, String.class); 

を、それはエラーで失敗しました:

JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token 

任意のアイデア?ありがとうございました

+0

あなたはそれが文字列である必要はないのはなぜ? – rorschach

答えて

0
JSONObject json= searchResult.getJSONObject("json"); 
Iterator keys = json.keys(); 

while(keys.hasNext()) { 
    // loop to get the dynamic key 
    String currentDynamicKey = (String)keys.next(); 

    // get the value of the dynamic key 
    JSONObject currentDynamicValue = questionMark.getJSONObject(currentDynamicKey); 

    // do something here with the value... 
} 
+0

質問は、付属のJSONでキーを検索するのではなく、Springの 'RestTemplate#exchange'メソッドを使用して修正する方法についてです。それをJavaオブジェクトに逆直列化しようとします。 – belgoros

1

最後に、解決策は次のとおりです。

{ 
    "some.translation.key": "traslated text", 
    "other.translation.key": "other traslated text" 
} 

ジャクソンパーサーは、それが文字列ではなく、マップするオブジェクトであるとは決して考えません。だからこそ私はその応答を地図にマップしなければならなかったのです。

ParameterizedTypeReference<Map<String, String>> typeRef = new ParameterizedTypeReference<Map<String, String>>() {}; 

その後exchangeメソッドにそれを渡します:

restTemplate.exchange(uri, HttpMethod.GET, requestEntity, typeRef); 

エンティティはHttpEntity<Object>クラスのインスタンスである はこれを実現するために、私は、マップタイプのParameterizedTypeReferenceを定義する必要がありました。地図に保存されたすべての翻訳を持つ

は、対応するキーを知っている翻訳を取得することは簡単です:

map.get("some.translation.key"); 
関連する問題