프로그래밍 정리/자바

[안드로이드, 자바] 문자열을 맵에 담기

주누다 2012. 9. 4. 17:53
반응형

bean의 파라미터로 맵을 을 받아서 처리하는데 이 맵의 구조가 복잡하고 규칙을 뽑아 내기가 어렵다. 
이러한 bean이 많고 또 bean의 테스트 케이스를 만들어야 하는데 테스트 데이터를 만들려니 여간 힘든게 아니다. 
한, 두개 만들어 보다가 문득 맵을 toString()하면 json형태로 나오고 그걸 json을 이용하면 다시 Map에 담을 수 있지 않을까 하는 생각이 미쳤다. 

검색을 "json Map"으로 해보니 역시나 좋은 자료가 줄줄줄 나온다. 



샘플소스
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsDateJsonBeanProcessor;
import net.sf.json.processors.JsonBeanProcessor;

public class Test {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
//String data = "{key1='val1', key3='val3', uList=[{uName='uName0', uAge='uAge0', uTitle='uTitle0'}, {uName='uName1', uAge='uAge1', uTitle='uTitle1'}, {uName='uName2', uAge='uAge2', uTitle='uTitle2'}, {uName='uName3', uAge='uAge3', uTitle='uTitle3'}, {uName='uName4', uAge='uAge4', uTitle='uTitle4'}], key2='val2', key4='val4', nList=[{nName='nName0', nTitle='nTitle0', nAge='nAge0'}, {nName='nName1', nTitle='nTitle1', nAge='nAge1'}, {nName='nName2', nTitle='nTitle2', nAge='nAge2'}, {nName='nName3', nTitle='nTitle3', nAge='nAge3'}, {nName='nName4', nTitle='nTitle4', nAge='nAge4'}]}";
String data = getTestData().toString();
JSONObject jsonObject = JSONObject.fromObject(data);
Map<String, Object> typeMap = new HashMap<String, Object>();
typeMap.put("nList", java.util.HashMap.class);
typeMap.put("uList", java.util.HashMap.class);
Map<String, Object> result = (Map<String, Object>)JSONObject.toBean(jsonObject, java.util.HashMap.class, typeMap);
System.out.println(result);
JsonBeanProcessor beanProcessor = new JsDateJsonBeanProcessor();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonBeanProcessor(java.sql.Date.class, beanProcessor);
}
private static Map<String, Object> getTestData(){
Map<String, Object> params = new HashMap<String, Object>();
params.put("key1", "'val1'");
params.put("key2", "'val2'");
params.put("key3", "'val3'");
params.put("key4", "'val4'");
List<Map<String, String>> nList = new ArrayList<Map<String, String>>();
for(int i=0;i<5;i++){
Map<String, String> item = new HashMap<String, String>();
item.put("nName", "'nName"+i+"'");
item.put("nTitle", "'nTitle"+i+"'");
item.put("nAge", "'nAge"+i+"'");
nList.add(item);
}
params.put("nList", nList);

List<Map<String, String>> uList = new ArrayList<Map<String, String>>();
for(int i=0;i<5;i++){
Map<String, String> item = new HashMap<String, String>();
item.put("uName", "'uName"+i+"'");
item.put("uTitle", "'uTitle"+i+"'");
item.put("uAge", "'uAge"+i+"'");
uList.add(item);
}
params.put("uList", uList);
return params;
}
}

쉽게 되드는 듯하다. 

jar 파일 두개 필수
- ezmorph-1.0.6.jar : http://json-lib.sourceforge.net
- json-lib-2.3-jdk15.jar : http://ezmorph.sourceforge.net

반응형