JSON 파싱 사용하기

개발/코딩 2015. 3. 12. 15:24

먼저 json-sample-1.2 jar를 다운 받아야한다.

 

<%@ page language="java" contentType="text/html; charset=euc-kr"  import="org.json.simple.*" %>
<%@ taglib uri="/spacenet/taglibs/dispData" prefix="dd" %>
<%@ page import="java.util.*, spacenet.func, spacenet.database.BlobQuery" %>
<%@ page import="java.io.PrintWriter"%>
<%@ page import="rental.*"%>
<%@ page import="java.util.*, spacenet.func, spacenet.ppplus.ppagencyuser.ppagencyUser" %>
<%

 WriteLog log = new WriteLog("/home/ppplus/logs/mobigo.log");

 String ppAgencyNo=func.NVL(request.getParameter("aid")); // http://partner.freet.co.kr/mobigo/mobigo.jsp?aid=
log.write(" === mobigo start ==="); 
log.write(" ppAgencyNo: ["+ppAgencyNo+"]"); 

 String ppAgencyName="";
 String operType="";
 int remain = 0;
 String resultCode = "99";
 
 ////////////////  해당 대리점 정상, 잔액 여부 쿼리 Start//////////////////////
 Hashtable param = new Hashtable();
 param.put("1" , "SELECT PP_AGENCY_NAME, REMAIN, OPER_TYPE FROM PP_AGENCY_INFO WHERE PP_AGENCY_NO = '"+ppAgencyNo+"' ");
%>
 <dd:data db="ppc" sql="REPLACE_QRY" params="<%=param%>" paramsReplace="true">
<%
 ppAgencyName = String.valueOf(data.get("1"));
 remain =Integer.parseInt(String.valueOf(data.get("2")));
 operType = String.valueOf(data.get("3"));
log.write(" ppAgencyName: ["+ppAgencyName+"]"); 
log.write(" remain: ["+remain+"]"); 
log.write(" operType: ["+operType+"]"); 
%>
</dd:data>
<%
 ////////////////  해당 대리점 정상, 잔액 여부 쿼리 End//////////////////////

 if(operType.equals("A"))
 {
  if(remain >= 1000)
   resultCode = "00";  // 대리점 영업이 정상일 경우 
  else
   resultCode = "99"; //정상이면서 잔액이 없는 경우 

 }
 else
  resultCode = "99"; //대리점 영업이 정상이 아닐 경우

log.write(" resultCode: ["+resultCode+"]"); 
 String callBack = request.getParameter("callBack");  // 서버로 부터 넘어온 데이터를 받아옴
log.write(" callBack: ["+callBack+"]"); 
log.write(" === mobigo end ==="); 
 JSONObject jObject = new JSONObject(); //하나의 정보를 저장할 JSONObject를 설정

 PrintWriter pw = response.getWriter();

 jObject.put("id", ppAgencyNo); //데이터를 삽입
 jObject.put("resultCode", resultCode); //데이터를 삽입 
 pw.print(callBack + "("+jObject.toString()+")");
// pw.print("("+jObject.toString()+")");
 pw.flush();
 pw.close();
%>

 

============================ json 파싱 ============================================

JSON형태로 저장된 파일을 읽어서 DB에 저장

******** json 파일 start *****************

{
 "date":"2015-03-03",
 "rowCount":2,
 "rows":
 [
  {
   "aid":"ID1",
   "aname":"\ub300\ub9ac\uc810\uba851",
   "acode":"\ub300\ub9ac\uc810\ucf54\ub4dc1",
   "dc":"7",
   "dp":"6300",
   "mc":"21"
  },
  {
   "aid":"ID2",
   "aname":"\ub300\ub9ac\uc810\uba852",
   "acode":"\ub300\ub9ac\uc810\ucf54\ub4dc2",
   "dc":"5",
   "dp":"4500",
   "mc":"15"
  },
  {
   "aid":"ID3",
   "aname":"\ub300\ub9ac\uc810\uba853",
   "acode":"\ub300\ub9ac\uc810\ucf54\ub4dc3",
   "dc":"7",
   "dp":"7500",
   "mc":"75"
  }
 ]
}

******** json 파일 end *****************

 

******** 파싱 및 DB저장 ****************

 

 

<%@ page language="java" contentType="text/html; charset=euc-kr"%>
<%@ page import="org.json.simple.*" %>
<%@ page import="java.io.*,rental.*"%>
<%@page import="org.json.simple.parser.*" %>
<%@ page import="java.util.*, spacenet.func, spacenet.database.BlobQuery" %>
<%!
 public String replaceString(String src, String oldStr, String newStr)
 {
  if (src == null)
   return null;

  StringBuffer dest = new StringBuffer("");
  int  oldLen = oldStr.length();
  int  srcLen = src.length();
  int  pos = 0;
  int  oldPos = 0;

  while ((pos = src.indexOf(oldStr, oldPos)) >= 0)
  {
   dest.append(src.substring(oldPos, pos));
   dest.append(newStr);
   oldPos = pos + oldLen;
  }

  if (oldPos < srcLen)
   dest.append(src.substring(oldPos));

  return dest.toString();
 }
%>
<%

  WriteLog log = new WriteLog("/home/ppplus/logs/mobigo.log");

  BlobQuery db = null;
  int qryno = 0, n = 0;

  JSONParser parser = new JSONParser();
  String acode="", aid="", aname="", dp="", mc="", dc="";

        try
        {
   Object obj = parser.parse(new FileReader("/data4/rcpro/mobigo/freet.json")); // myJson.json파일을 읽어와 Object로 파싱
 
   JSONObject jsonObject =(JSONObject) obj;

   JSONArray msgList =(JSONArray) jsonObject.get("rows");  // key 값으로 list가져오기
/*
   Iterator iterator = msgList.iterator(); 
         while(iterator.hasNext())  iterator 로 파일 읽기
   {
                out.println(iterator.next());
            }
*/
   String date = (String) jsonObject.get("date");  //날짜
   int rowCount = func.objToInt(jsonObject.get("rowCount")); //레코드 갯수
   
   date = replaceString((date),"-",""); // YYYY-MM-DD 형식에서 YYYYMMDD 형식으로

log.write(" date: ["+date+"]"); 
log.write(" rowCount: ["+rowCount+"]");

   try
   {
    db = new BlobQuery();
    //db에 접속하기
    if (!db.getConnect("ppc"))
    {
     out.println("<script>alert('db 접속오류가 발생하였습니다. 다시 시도해주세요.'); history.back(); </script>");
    }

    db.SQL = "INSERT INTO MOBIGO (PROCESS_DATE, ROW_COUNT, ID, PP_AGENCY_NO, PP_AGENCY_NAME, DAY_COUNT, DAY_FEE, VAT_DAY_FEE, MONTH_COUNT) "
       +"VALUES ( ? ,?, ?, ?, ?, ?, ?, ? ,? ) ";

    qryno = db.prepareStatement();

    for(int i=0; i < msgList.size(); i++)
    {
     JSONObject jsonobj=(JSONObject)msgList.get(i); //각각의 값을 개별로 가져오기 위해 JSON 배열 파싱후 각각의 key로 value 값 출력

     aid=(String) jsonobj.get("aid");  //ID
     aname=(String) jsonobj.get("aname"); //대리점명
     acode=(String) jsonobj.get("acode"); //대리점코드
     dc=(String) jsonobj.get("dc");  //일일누적건수
     dp=(String) jsonobj.get("dp");  //일일 누적 금액
     mc=(String) jsonobj.get("mc"); //월 누적건수
     double vatDp = Double.parseDouble(dp) * 1.1; //일일 누적금액에 부가세 포함

log.write(" aid: ["+aid+"]"); 
log.write(" aname: ["+aname+"]"); 
log.write(" acode: ["+acode+"]"); 
log.write(" dc: ["+dc+"]"); 
log.write(" dp: ["+dp+"]"); 
log.write(" mc: ["+mc+"]");
log.write(" vatDp: ["+vatDp+"]");
 
     db.Statements(qryno).setString(1, date);
     db.Statements(qryno).setInt(2, rowCount);
     db.Statements(qryno).setString(3, aid);
     db.Statements(qryno).setString(4, acode);
     db.Statements(qryno).setString(5, aname);
     db.Statements(qryno).setInt(6, Integer.parseInt(dc));
     db.Statements(qryno).setInt(7, Integer.parseInt(dp));
     db.Statements(qryno).setDouble(8, vatDp);
     db.Statements(qryno).setInt(9, Integer.parseInt(mc));

     n = db.executeUpdate(qryno);  
log.write(" RESULT: ["+n+"]"); 
    }

    db.Close(qryno);
    db.commit();  

   }
   catch(Exception e)
   {
log.write("error: " + e.getMessage());
    db.rollback();
   }
   finally
   {
    db.freeConnect();
   }
        } catch (Exception e)
        {
             e.printStackTrace();
log.write("error: " + e.getMessage());
        }

%>


 

'개발 > 코딩' 카테고리의 다른 글

메뉴 클릭하면 이미지 변경  (0) 2016.03.21
url로 파일 다운로드  (0) 2015.03.12
session을 통해 값넘기기  (0) 2014.06.11
request.getParameter로 값 넘기기  (0) 2014.06.11
request, response 객체  (0) 2014.04.03