2011-02-11 4 views
1

flexjson.deserializer를 사용하여 java에서 List <Map>로 jsonarray를 deserialize하는 방법은 무엇입니까?

클라이언트 측에서는 다음과 같이 JSOnARRAY를 구성했습니다.

{"filterEntries":[{"dataName":"mainContact","filterValue":"BILLGATES"}]}. 

서버 측 (java)에서는 다음을 사용하여 값을 retireve 할 수 있습니다.

jfilter = JSONValue.parse(jsonFilterStr); //jsonFilterStr={"filterEntries":[{"dataName":"mainContact","filterValue":"BILLGATES"}]}. 

JSONArray jFilterEntries = (JSONArray) jfilter.get("filterEntries"); 
for (int i=0;i<jFilterEntries.size();i++){ 
    JSONObject jFilterEntry = (JSONObject) jFilterEntries.get(i); 
    String dataName = (String) jFilterEntry.get("dataName"); 
    String filterValue = (String) jFilterEntry.get("filterValue"); 
} 

그러나 기존 응용 프로그램은 flex .json.deserializer 및 flex.json.deserializer 사용하여 동일한 얻을 수 없습니다. 어떻게해야합니까? 다음과 같이하고 싶습니다 :

JSONDeserializer jsonDeserializer = new JSONDeserializer(); 
jsonDeserializer.use(null, List.class); 
List<Map<String,String>> lMap= (List<Map<String,String>>)jsonDeserializer.deserialize(params); 

답변

3

배열을 감싸는 상위 개체를 기억하십시오. 당신도 그것을 처리해야합니다. List 내에서 Map을 기대하도록 말해야합니다. 이를 수행하려면 경로 표현식 "values"를 사용하여 목록에 포함 된 유형을 지정해야합니다. 새로운 키워드를 추가하고, 왼쪽 오른쪽 경기에 일반 유형을 만든 :

Map<String,List<Map<String,String>>> result = new JSONDeserializer<Map<String,List<Map<String,String>>>>() 
    .use("values",List.class) 
    .use("values.values", Map.class) 
    .deserialize(json); 

List<Map<String,String>> filterEntries = result.get("filterEntries"); 

업데이트되었습니다.

+0

위의 코드에 몇 가지 문제가있는 것으로 보입니다. 실행되지 않았기 때문에 확실합니다. 하지만 JSON 디자이너 이전에 "새로운"것이 필요합니다. 나는 또한 ">" "List에 을 변환 할 수 없다는 오류가 발생합니다. 또한 이와 같은 시도를하고 있지만 다소 복잡하지는 않습니다 : {"title ": ["a "," B ","C "]} '부호' 지도 <문자열 목록 > = 결과 새로운 JSONDeserializer Chris

+0

지도 <문자열 목록 > = reuslt 새로운 JSONDeserializer <지도 <문자열 목록 >>(). use ("values", List.class) .deserialize (json); – chubbsondubs

관련 문제