javascript XML to JSON 변환

Duboo·2022년 9월 19일
3
post-thumbnail

공공데이터포털 API를 통해서 JSON 데이터를 받아오고 싶은데 아무리 찾아도 XML 형식밖에 없어서 JSON으로 변환시키는 방법을 작성합니다.


방법은 크게 2가지로 나뉘는데 코드로 구현하는 것과 라이브러리를 사용하는것

당연히 라이브러리가 있으면 라이브러리를 사용하는게 쉽고 편하지만 이번에는 Vanila JS를 사용합니다.

xml => json 변환 xmlToJson함수

function xmlToJson(xml) {
  // Create the return object
  var obj = {};

  if (xml.nodeType == 1) {
    // element
    // do attributes
    if (xml.attributes.length > 0) {
      obj["@attributes"] = {};
      for (var j = 0; j < xml.attributes.length; j++) {
        var attribute = xml.attributes.item(j);
        obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
      }
    }
  } else if (xml.nodeType == 3) {
    // text
    obj = xml.nodeValue;
  }

  // do children
  // If all text nodes inside, get concatenated text from them.
  var textNodes = [].slice.call(xml.childNodes).filter(function(node) {
    return node.nodeType === 3;
  });
  if (xml.hasChildNodes() && xml.childNodes.length === textNodes.length) {
    obj = [].slice.call(xml.childNodes).reduce(function(text, node) {
      return text + node.nodeValue;
    }, "");
  } else if (xml.hasChildNodes()) {
    for (var i = 0; i < xml.childNodes.length; i++) {
      var item = xml.childNodes.item(i);
      var nodeName = item.nodeName;
      if (typeof obj[nodeName] == "undefined") {
        obj[nodeName] = xmlToJson(item);
      } else {
        if (typeof obj[nodeName].push == "undefined") {
          var old = obj[nodeName];
          obj[nodeName] = [];
          obj[nodeName].push(old);
        }
        obj[nodeName].push(xmlToJson(item));
      }
    }
  }
  return obj;
}

API 호출

  // api 호출
const getXMLfromAPI = async () => {
	const url = "url 데이터";
	const reqURL = `${url}${ENCODING_API_KEY}`;
    const response = await fetch(reqURL);
    const xmlString = await response.text();
    let XmlNode = new DOMParser().parseFromString(xmlString, "text/xml");
    console.log(xmlToJson(XmlNode));
  };

결과

이제 평소 사용하던대로 JSON을 사용하면된다.


참고 github

profile
둡둡

0개의 댓글