Scenario: 클라이언트에서 jsp를 쓸 수 없었고, 세션 정보도 불러올 수 없고, json을 통해서만 서버와 통신 할 수 있었다.

어떤 자료구조를 날리기 위해 List<Map<>>을 Json 으로 바꿔서 날려야만 했고, 받을때도 Json을 받아야만 했다. 엄청 삽질 해서 겨우 해냈다.


Solutions:


1 Json to List<Map<>>


Java 0.42 KB
  1. import org.codehaus.jackson.JsonGenerationException;
  2. import org.codehaus.jackson.map.JsonMappingException;
  3. import org.codehaus.jackson.map.ObjectMapper;
  4.  
  5.     public static String getQuestion() throws JsonGenerationException, JsonMappingException, IOException{
  6.         ObjectMapper objectMapper = new ObjectMapper();
  7.  
  8.         String json = objectMapper.writeValueAsString(questionPool);
  9.  
  10.         System.out.println(json);
  11.        
  12.         return json;
  13.     }



2.List<Map<>>  to Json

Java 0.84 KB
  1.         import org.codehaus.jackson.map.ObjectMapper;
  2.         import org.codehaus.jackson.node.ObjectNode;
  3.         import org.codehaus.jackson.type.TypeReference;

  4.         ObjectNode sessionNode =  (ObjectNode) obj.get(JsonAdaptorObject.TYPE.META);
  5.        
  6.        
  7.         //wow... Tostring 으로 하면 "" 이 붙어서 json list로 인식못함
  8.         // astext 한방에 되버림. tostring을 할경우 더블 쿼테이션이 "" 붙어버려서 망해버렷엇음
  9.         String json = sessionNode.get("quesMapList").asText();
  10.        
  11.         List<HashMap<String, Object>> queList;
  12.         ObjectMapper MAPPER = new ObjectMapper();
  13.  
  14.        
  15.         //""이 붙는 상황에서 고쳤다.
  16.         //astext로 바꾸고 json 형태를 Map List 로 으로 바꿨음
  17.         try {
  18.             System.out.println(">>start");
  19.             queList = MAPPER.readValue(json, new TypeReference<List<HashMap<String, Object>>>() {});
  20.             System.out.println(queList.get(0).get("qNum"));
  21.         } catch (IOException e1) {
  22.             // TODO Auto-generated catch block
  23.             e1.printStackTrace();
  24.         }


+뷰단에서 스트링값으로 온 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함

JavaScript 0.63 KB
  1. //콜백 펑션임
  2. function(resMIS000){
  3.             //제이선 -> String 시에는 stringify, 제이선 파싱시에는 parse
  4. //          alert(JSON.stringify(resMIS000).replace(/\\/g, ""));
  5.             //Client 단에서 String jason을 파싱해주기 위해서 \과 대괄호를 제거 해주기위해 다음과 같은 정규식적용
  6.             var jsonString = JSON.stringify(resMIS000.body.misList).replace(/\\/g, "").replace(/"\[/g,"\[").replace(/\]"/g,"\]");
  7.             fn_setStatus(JSON.parse(jsonString));
  8. }
  9.  
  10. function fn_setStatus(data) {
  11.     $.each(data, function(idx, val){
  12.         console.log(val.question+" "+idx);
  13.         fn_setTag(idx, val);
  14.     });
  15. }


+ Recent posts