백엔드 Back-end/노드 Node.js

Node.js xml2js 모듈 테스트, XML을 JSON으로 바꾸기

Tap to restart 2020. 10. 23. 20:00
반응형

xml2js

npm 페이지 주소: www.npmjs.com/package/xml2js

 

XML을 JSON으로

JSON을 XML로 바꿔준다.

 

테스트 XML

국토교통부 아파트매매 실거래자료 XML 예

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<items>
<item><거래금액>    27,500
</거래금액><건축년도>1992
</건축년도><년>2006
</년><도로명>분당로
</도로명><도로명건물본번호코드>00212
</도로명건물본번호코드><도로명건물부번호코드>00000
</도로명건물부번호코드><도로명시군구코드>41135
</도로명시군구코드><도로명일련번호코드>01
</도로명일련번호코드><도로명지상지하코드>0
</도로명지상지하코드><도로명코드>3180026
</도로명코드><법정동> 분당동
</법정동><법정동본번코드>0035
</법정동본번코드><법정동부번코드>0000
</법정동부번코드><법정동시군구코드>41135
</법정동시군구코드><법정동읍면동코드>10100
</법정동읍면동코드><법정동지번코드>1
</법정동지번코드><아파트>샛별마을(동성)
</아파트><월>5
</월><일>1
</일><일련번호>41135-18
</일련번호><전용면적>59.4
</전용면적><지번>35
</지번><지역코드>41135
</지역코드><층>8
</층>
</item>
<item><거래금액>    44,000
</거래금액><건축년도>1993
</건축년도><년>2006
</년><도로명>장안로41번길
</도로명><도로명건물본번호코드>00013
</도로명건물본번호코드><도로명건물부번호코드>00000
</도로명건물부번호코드><도로명시군구코드>41135
</도로명시군구코드><도로명일련번호코드>01
</도로명일련번호코드><도로명지상지하코드>0
</도로명지상지하코드><도로명코드>4340380
</도로명코드><법정동> 분당동
</법정동><법정동본번코드>0066
</법정동본번코드><법정동부번코드>0000
</법정동부번코드><법정동시군구코드>41135
</법정동시군구코드><법정동읍면동코드>10100
</법정동읍면동코드><법정동지번코드>1
</법정동지번코드><아파트>장안타운(건영)
</아파트><월>5
</월><일>1
</일><일련번호>41135-32
</일련번호><전용면적>131.55
</전용면적><지번>66
</지번><지역코드>41135
</지역코드><층>4
</층>
</item>
</items>
<numOfRows>2</numOfRows>
<pageNo>1</pageNo>
<totalCount>495</totalCount>
</body>
</response>

 

코드

const xml =
    "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
    "<response>\n" +
    "<header>\n" +
    "<resultCode>00</resultCode>\n" +
    "<resultMsg>NORMAL SERVICE.</resultMsg>\n" +
    "</header>\n" +
    "<body>\n" +
    "<items>\n" +
    "<item><거래금액>    27,500\n" +
    "</거래금액><건축년도>1992\n" +
    "</건축년도><년>2006\n" +
    "</년><도로명>분당로\n" +
    "</도로명><도로명건물본번호코드>00212\n" +
    "</도로명건물본번호코드><도로명건물부번호코드>00000\n" +
    "</도로명건물부번호코드><도로명시군구코드>41135\n" +
    "</도로명시군구코드><도로명일련번호코드>01\n" +
    "</도로명일련번호코드><도로명지상지하코드>0\n" +
    "</도로명지상지하코드><도로명코드>3180026\n" +
    "</도로명코드><법정동> 분당동\n" +
    "</법정동><법정동본번코드>0035\n" +
    "</법정동본번코드><법정동부번코드>0000\n" +
    "</법정동부번코드><법정동시군구코드>41135\n" +
    "</법정동시군구코드><법정동읍면동코드>10100\n" +
    "</법정동읍면동코드><법정동지번코드>1\n" +
    "</법정동지번코드><아파트>샛별마을(동성)\n" +
    "</아파트><월>5\n" +
    "</월><일>1\n" +
    "</일><일련번호>41135-18\n" +
    "</일련번호><전용면적>59.4\n" +
    "</전용면적><지번>35\n" +
    "</지번><지역코드>41135\n" +
    "</지역코드><층>8\n" +
    "</층>\n" +
    "</item>\n" +
    "<item><거래금액>    44,000\n" +
    "</거래금액><건축년도>1993\n" +
    "</건축년도><년>2006\n" +
    "</년><도로명>장안로41번길\n" +
    "</도로명><도로명건물본번호코드>00013\n" +
    "</도로명건물본번호코드><도로명건물부번호코드>00000\n" +
    "</도로명건물부번호코드><도로명시군구코드>41135\n" +
    "</도로명시군구코드><도로명일련번호코드>01\n" +
    "</도로명일련번호코드><도로명지상지하코드>0\n" +
    "</도로명지상지하코드><도로명코드>4340380\n" +
    "</도로명코드><법정동> 분당동\n" +
    "</법정동><법정동본번코드>0066\n" +
    "</법정동본번코드><법정동부번코드>0000\n" +
    "</법정동부번코드><법정동시군구코드>41135\n" +
    "</법정동시군구코드><법정동읍면동코드>10100\n" +
    "</법정동읍면동코드><법정동지번코드>1\n" +
    "</법정동지번코드><아파트>장안타운(건영)\n" +
    "</아파트><월>5\n" +
    "</월><일>1\n" +
    "</일><일련번호>41135-32\n" +
    "</일련번호><전용면적>131.55\n" +
    "</전용면적><지번>66\n" +
    "</지번><지역코드>41135\n" +
    "</지역코드><층>4\n" +
    "</층>\n" +
    "</item>\n" +
    "</items>\n" +
    "<numOfRows>2</numOfRows>\n" +
    "<pageNo>1</pageNo>\n" +
    "<totalCount>495</totalCount>\n" +
    "</body>\n" +
    "</response>";

const xml2js = require('xml2js');
const parser = new xml2js.Parser(/* options */);
parser.parseStringPromise(xml).then(function (result) {
    console.log("resultCode:", result.response.header[0].resultCode[0]);
    
    const json = JSON.stringify(result);
    console.log(json);
}).catch(function (err) {
});

 

결과

resultCode: 00
{"response":{"header":[{"resultCode":["00"],"resultMsg":["NORMAL SERVICE."]}],"body":[{"items":[{"item":[{"거래금액":["    27,500\n"],"건축년도":["1992\n"],"년":["2006\n"],"도로명":["분당로\n"],"도로명건물본번호코드":["00212\n"],"도로명건물부번호코드":["00000\n"],"도로명시군구코드":["41135\n"],"도로명일련번호코드":["01\n"],"도로명지상지하코드":["0\n"],"도로명코드":["3180026\n"],"법정동":[" 분당동\n"],"법정동본번코드":["0035\n"],"법정동부번코드":["0000\n"],"법정동시군구코드":["41135\n"],"법정동읍면동코드":["10100\n"],"법정동지번코드":["1\n"],"아파트":["샛별마을(동성)\n"],"월":["5\n"],"일":["1\n"],"일련번호":["41135-18\n"],"전용면적":["59.4\n"],"지번":["35\n"],"지역코드":["41135\n"],"층":["8\n"]},{"거래금액":["    44,000\n"],"건축년도":["1993\n"],"년":["2006\n"],"도로명":["장안로41번길\n"],"도로명건물본번호코드":["00013\n"],"도로명건물부번호코드":["00000\n"],"도로명시군구코드":["41135\n"],"도로명일련번호코드":["01\n"],"도로명지상지하코드":["0\n"],"도로명코드":["4340380\n"],"법정동":[" 분당동\n"],"법정동본번코드":["0066\n"],"법정동부번코드":["0000\n"],"법정동시군구코드":["41135\n"],"법정동읍면동코드":["10100\n"],"법정동지번코드":["1\n"],"아파트":["장안타운(건영)\n"],"월":["5\n"],"일":["1\n"],"일련번호":["41135-32\n"],"전용면적":["131.55\n"],"지번":["66\n"],"지역코드":["41135\n"],"층":["4\n"]}]}],"numOfRows":["2"],"pageNo":["1"],"totalCount":["495"]}]}}

 

결과 중 JSON 부분만 보기 좋게 보면 아래와 같다.

별다른 옵션을 지정하지 않을 경우 아래 예처럼 데이터 대부분이 배열로 처리된다.

<resultCode>00</resultCode>도

"resultCode": ["00"]로 처리된다.

이 부분이 좀 불편했다.

{
  "response": {
    "header": [
      {
        "resultCode": [
          "00"
        ],
        "resultMsg": [
          "NORMAL SERVICE."
        ]
      }
    ],
    "body": [
      {
        "items": [
          {
            "item": [
              {
                "거래금액": [
                  "    27,500\n"
                ],
                "건축년도": [
                  "1992\n"
                ],
                "년": [
                  "2006\n"
                ],
                "도로명": [
                  "분당로\n"
                ],
                "도로명건물본번호코드": [
                  "00212\n"
                ],
                "도로명건물부번호코드": [
                  "00000\n"
                ],
                "도로명시군구코드": [
                  "41135\n"
                ],
                "도로명일련번호코드": [
                  "01\n"
                ],
                "도로명지상지하코드": [
                  "0\n"
                ],
                "도로명코드": [
                  "3180026\n"
                ],
                "법정동": [
                  " 분당동\n"
                ],
                "법정동본번코드": [
                  "0035\n"
                ],
                "법정동부번코드": [
                  "0000\n"
                ],
                "법정동시군구코드": [
                  "41135\n"
                ],
                "법정동읍면동코드": [
                  "10100\n"
                ],
                "법정동지번코드": [
                  "1\n"
                ],
                "아파트": [
                  "샛별마을(동성)\n"
                ],
                "월": [
                  "5\n"
                ],
                "일": [
                  "1\n"
                ],
                "일련번호": [
                  "41135-18\n"
                ],
                "전용면적": [
                  "59.4\n"
                ],
                "지번": [
                  "35\n"
                ],
                "지역코드": [
                  "41135\n"
                ],
                "층": [
                  "8\n"
                ]
              },
              {
                "거래금액": [
                  "    44,000\n"
                ],
                "건축년도": [
                  "1993\n"
                ],
                "년": [
                  "2006\n"
                ],
                "도로명": [
                  "장안로41번길\n"
                ],
                "도로명건물본번호코드": [
                  "00013\n"
                ],
                "도로명건물부번호코드": [
                  "00000\n"
                ],
                "도로명시군구코드": [
                  "41135\n"
                ],
                "도로명일련번호코드": [
                  "01\n"
                ],
                "도로명지상지하코드": [
                  "0\n"
                ],
                "도로명코드": [
                  "4340380\n"
                ],
                "법정동": [
                  " 분당동\n"
                ],
                "법정동본번코드": [
                  "0066\n"
                ],
                "법정동부번코드": [
                  "0000\n"
                ],
                "법정동시군구코드": [
                  "41135\n"
                ],
                "법정동읍면동코드": [
                  "10100\n"
                ],
                "법정동지번코드": [
                  "1\n"
                ],
                "아파트": [
                  "장안타운(건영)\n"
                ],
                "월": [
                  "5\n"
                ],
                "일": [
                  "1\n"
                ],
                "일련번호": [
                  "41135-32\n"
                ],
                "전용면적": [
                  "131.55\n"
                ],
                "지번": [
                  "66\n"
                ],
                "지역코드": [
                  "41135\n"
                ],
                "층": [
                  "4\n"
                ]
              }
            ]
          }
        ],
        "numOfRows": [
          "2"
        ],
        "pageNo": [
          "1"
        ],
        "totalCount": [
          "495"
        ]
      }
    ]
  }
}
반응형