Scenario: 클라이언트에서 jsp를 쓸 수 없었고, 세션 정보도 불러올 수 없고, json을 통해서만 서버와 통신 할 수 있었다.
어떤 자료구조를 날리기 위해 List<Map<>>을 Json 으로 바꿔서 날려야만 했고, 받을때도 Json을 받아야만 했다. 엄청 삽질 해서 겨우 해냈다.
Solutions:
1 Json to List<Map<>>
- import org.codehaus.jackson.JsonGenerationException;
- import org.codehaus.jackson.map.JsonMappingException;
- import org.codehaus.jackson.map.ObjectMapper;
- public static String getQuestion() throws JsonGenerationException, JsonMappingException, IOException{
- ObjectMapper objectMapper = new ObjectMapper();
- String json = objectMapper.writeValueAsString(questionPool);
- System.out.println(json);
- return json;
- }
2.List<Map<>> to Json
- import org.codehaus.jackson.map.ObjectMapper;
- import org.codehaus.jackson.node.ObjectNode;
- import org.codehaus.jackson.type.TypeReference;
- ObjectNode sessionNode = (ObjectNode) obj.get(JsonAdaptorObject.TYPE.META);
- //wow... Tostring 으로 하면 "" 이 붙어서 json list로 인식못함
- // astext 한방에 되버림. tostring을 할경우 더블 쿼테이션이 "" 붙어버려서 망해버렷엇음
- String json = sessionNode.get("quesMapList").asText();
- List<HashMap<String, Object>> queList;
- ObjectMapper MAPPER = new ObjectMapper();
- //""이 붙는 상황에서 고쳤다.
- //astext로 바꾸고 json 형태를 Map List 로 으로 바꿨음
- try {
- System.out.println(">>start");
- queList = MAPPER.readValue(json, new TypeReference<List<HashMap<String, Object>>>() {});
- System.out.println(queList.get(0).get("qNum"));
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
+뷰단에서 스트링값으로 온 Jason 값 처리
Sever단에서 String으로 처리해서 Client 단으로 보내야 했기때문에, 다음과 같이 Jason 데이터로 전달되었다.
"[{\"qNum\":\"1\",\"question\":\"아침 9시까지 그린카를 타고 가산동으로\",\"missFlag\":\"true\"},{\"qNum\":\"2\",\"question\":\"목적지 주변에서 미션을 찾으세요\",\"missFlag\":\"ing\"},{\"qNum\":\"3\",\"question\":\"3번쨰 목적지로 가서 QR 코드를 찾아보세요\",\"missFlag\":\"false\"},{\"qNum\":\"4\",\"question\":\"4번째 미션.\",\"missFlag\":\"false\"},{\"qNum\":\"5\",\"question\":\"5번째 미션.\",\"missFlag\":\"false\"}]"
이것을 파싱해주기위해 다음처럼 정규식을 이용해 replace함
- //콜백 펑션임
- function(resMIS000){
- //제이선 -> String 시에는 stringify, 제이선 파싱시에는 parse
- // alert(JSON.stringify(resMIS000).replace(/\\/g, ""));
- //Client 단에서 String jason을 파싱해주기 위해서 \과 대괄호를 제거 해주기위해 다음과 같은 정규식적용
- var jsonString = JSON.stringify(resMIS000.body.misList).replace(/\\/g, "").replace(/"\[/g,"\[").replace(/\]"/g,"\]");
- fn_setStatus(JSON.parse(jsonString));
- }
- function fn_setStatus(data) {
- $.each(data, function(idx, val){
- console.log(val.question+" "+idx);
- fn_setTag(idx, val);
- });
- }
'To be Developer > WEB' 카테고리의 다른 글
[Jquery] Ajax로 페이징시 선택된 번호 Active (0) | 2017.09.05 |
---|---|
[Tomcat7]Ubuntu NamingException (0) | 2017.08.15 |
[BootStrap] Js파일 충돌 드디어 고쳤다!!! (jQuery.noConflict()) (1) | 2017.05.18 |
[HTML, jQuery] 동적으로 생성된 태그에는 live로 이벤트 바인드하기 (1) | 2017.04.05 |
[펌]이미지 업로드 후 view 할 때 (0) | 2017.03.29 |