본문 바로가기
programming/SpringJava

자바에서 xml을 json으로 변환하기 org.json.XML.toJSONObject(XML문자열)

by 개코 - 개발과 코딩 2021. 7. 10.

xml을 직접 다루는 것은 어렵지 않고 json을 직접 다루는 것도 어렵지는 않지만 xml을 json으로 변환하여 사용해야 할 때가 있다. 같은 데이터지만 일관된 데이터 집합으로 만들면 나중을 위해 사용하기 편할 수 있다. 물론, 원본데이터 또한 보관할 필요가 있을 때는 xml 데이터를 저장해야 한다.

XML JSON 변환
XML JSON 변환

 

xml과 json 차이

필요한 데이터를 요청하고 얻고자 할 때 데이터제공자는 xml 또는 json 형태로 데이터를 보내준다.

xml형식의 대표적인 예는 RSS 피드를 사용한 뉴스들이 있다.

xml은 태그형태의 문서객체를 전송해 준다.

json은 텍스트형태로 내용을 전송해 준다.

이 둘의 차이는 별거 없다.

xml은 태그 형식으로 데이터를 전송해 주고 json은 키와 값의 쌍으로 만들어진 데이터 집합으로 전송해 준다.

둘 다 일정한 형태의 데이터 구조를 가지고 있으며 그렇기에 xml을 json으로 변환하여 사용하는 경우도 많다.

 

필요한 것 org.json

메이븐에서 org.json 패키지를 얻도록 하자.

버전은 바뀌었을 수 있으며 최신버전을 위해 아래 참조한 주소를 확인하자.

mvnrepository 에는 메이븐을 위한 다양한 패키지가 구비되어 있다.

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
	<groupId>org.json</groupId>
	<artifactId>json</artifactId>
	<version>20210307</version>
</dependency>

 

변환 XML.toJSONObject

코드 한줄이면 된다.

XML.toJSONObject( XML문자열 ) 을 이용하면 XML 형식의 데이터구조를 JSON 객체 데이터구조로 변환해 준다.

아래의 코드는 JSON 객체로 변환한 코드이다.

예제를 봤으니 실제로 구현해 보자.

import org.json.XML; // 패키지 import

//- 중간생략 - 

try {
	
    // xml을 json문자열로 변환
    JSONObject vJsonObject = XML.toJSONObject(XML문자열);
	
} catch(Exception ex) {
	
}

 

구현해 보자

자바로 구현할 수 있지만 개인적으로 귀찮아서 STS 컨트롤러에서 그냥 구현해 보았다.

자바 이클립스에서 구현해도 코드상으로는 똑같이 사용해도 상관없다.

아래의 코드는 연합뉴스의 RSS 뉴스 피드 일부 문자열을 가지고 실험해 보았다.

RSS 피드는 XML 형식이기 때문에 용이하다.

import org.json.JSONObject;
import org.json.XML;

//- 중간생략

@RequestMapping(value = "/xmltojson", method = RequestMethod.GET)
public void XMLToJSON(Locale locale, Model model) {
	
	String vXMLString = "<rss xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:sy=\"http://purl.org/rss/1.0/modules/syndication/\" xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\" version=\"2.0\">\n" + 
			"<channel>\n" + 
			"<title>연합뉴스TV :: 대한민국 뉴스의 시작. 채널 23 » 최신</title>\n" + 
			"<atom:link href=\"http://www.yonhapnewstv.co.kr/browse/feed/\" rel=\"self\" type=\"application/rss+xml\"/>\n" + 
			"<link>http://www.yonhapnewstv.co.kr</link>\n" + 
			"<description/>\n" + 
			"<lastBuildDate>Sat, 10 Jul 2021 15:21:01 +0900</lastBuildDate>\n" + 
			"<language>ko-KR</language>\n" + 
			"<sy:updatePeriod>hourly</sy:updatePeriod>\n" + 
			"<sy:updateFrequency>1</sy:updateFrequency>\n" + 
			"<generator>http://www.yonhapnewstv.co.kr</generator>\n" + 
			"</channel>\n" + 
			"</rss>";
	
	JSONObject vJsonObject = XML.toJSONObject(vXMLString);
	
	System.out.println("----------");
	System.out.println(vJsonObject);
}

변환이 잘 되는 것을 확인할 수 있다.

단지, 출력되는 결과는 문자열이다.

데이터형은 json 객체 형태이지만 출력문에서 암묵적인 형변환이 발생한 것을 생각하자.

xml json 변환 결과
xml json 변환 결과

반응형

댓글