JSON을 XML로 변환 Java 예제와 함께 Gson 및 JAXB 사용

JSON이란 무엇입니까?

JSON은 다음의 약어입니다. Javascript 객체 표기법은 현재 대부분의 프로그래밍 언어가 읽을 수 있는 특정 규칙을 따르는 데이터 형식입니다. 이를 데이터베이스의 파일이나 레코드에 쉽게 저장할 수 있습니다. JSON 형식은 키-값 쌍을 사용하여 데이터를 설명합니다.

다음 예시에서는 개인 정보를 저장하는 JSON 문자열을 정의합니다.

{
"username" : "guru99user",
"email" : "guru99user@mail.com"	
}

따라서 JSON의 구문은 매우 간단합니다. 각 데이터 정보는 필드 이름과 특정 레코드의 값에 해당하는 키와 값이라는 두 부분으로 구성됩니다. 그러나 더 자세히 살펴보면 다음과 같은 몇 가지 사항이 있습니다.

  • JSON 문자열은 중괄호 {}로 묶입니다.
  • JSON의 키와 값은 따옴표 {"}로 묶어야 합니다.
  • 데이터가 더 많은 경우(더 많은 키 => 값 쌍) 쉼표(,)를 사용하여 구분합니다.
  • JSON 키는 부호 없는 문자나 숫자, _만 사용해야 하며 공백은 사용할 수 없습니다. 첫 번째 문자는 숫자로 설정해서는 안 됩니다.

XML이란 무엇입니까?

XML은 World Wide Web Consortium에서 제안한 확장 가능한 마크업 언어라고도 불리는 eXtensible Markup Language의 약자입니다(https://www.w3.org/) 다른 마크업 언어를 생성합니다. 이는 다양한 유형의 데이터를 설명할 수 있는 간단한 하위 집합이므로 시스템 간에 데이터를 공유하는 데 매우 유용합니다.

XML의 태그는 사전 정의되지 않은 경우가 많지만 사용자 규칙에 따라 생성됩니다. XML HTML의 장점을 기반으로 새로운 기능을 소개합니다.

다양한 시스템과 솔루션에는 더욱 유용한 XML 작성 기능이 있습니다.

  • XML은 확장 가능합니다. XML을 사용하면 애플리케이션에 적합한 사용자 정의 태그를 만들 수 있습니다.
  • XML은 데이터를 표시하는 것이 아니라 전달합니다. XML을 사용하면 데이터가 어떻게 표시되든 관계없이 데이터를 저장할 수 있습니다.
  • XML은 공통 표준입니다. XML은 W3C(World Wide Web Consortium)에서 개발되었으며 개방형 표준으로 사용 가능합니다.

XML은 중첩된 노드 구조를 기반으로 구축되었습니다. 각 노드에는 다음과 같이 여는 태그와 닫는 태그가 있습니다.

<node>content</node>

그 중:

  • 오픈 태그인 경우 이 태그의 이름은 사용자가 정의합니다.
  • 닫힌 태그인 경우 이 태그의 이름은 열린 태그의 이름과 일치해야 합니다.
  • 함유량 이 태그의 내용입니다.

각 XML 파일 상단에서 사용 중인 XML 버전을 나타내는 태그를 선언해야 합니다. 명령어 태그의 구문은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

그슨이란 무엇입니까?

그손(https://github.com/google/gson)는 사용자가 다음을 변환할 수 있도록 하는 Java 라이브러리입니다. Java 객체를 JSON 문자열로 변환하고 JSON 문자열을 다음으로 변환합니다. Java 물체. Gson은 임의의 작업을 수행할 수 있습니다. Java 소스 코드가 없는 기존 개체를 포함한 개체입니다.

버전 1.6부터 Gson은 두 가지 새로운 클래스를 도입합니다. JsonReader 그리고 JsonWriter JSON 데이터에 대한 스트리밍 처리를 제공합니다.

  • JsonWriter – JSON에 스트리밍 쓰기. 일반적인 구현을 위한 구문은 다음과 같습니다. 우리는 JsonWriter 물체. JSON 문자열 생성을 시작하고 마치려면 다음 함수를 사용합니다. 시작객체() 그리고 끝객체(). 이 두 함수를 실행하는 중간에 쌍(키 => 값)으로 데이터 쓰기를 수행합니다.
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
  • JsonReader – JSON에서 스트리밍 읽기. 일반적인 구현을 위한 구문은 다음과 같습니다. JsonReader 객체를 생성합니다. JSON 문자열 생성을 시작하고 완료하려면 BeginObject() 및 endObject() 함수를 사용합니다. 이 두 함수를 실행하는 중간에 쌍(키 => 값)으로 데이터를 읽는 작업을 수행합니다.
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
	String name = reader.nextName();
	if (name.equals("key")) {
		String value = reader.nextString();
	}
}
reader.endObject();

Gson 스트리밍 처리가 빠릅니다. 그러나 JSON 데이터 처리의 각 쌍(키 => 값)을 처리해야 합니다.

JAXB란 무엇입니까?

JAXB는 다음을 의미합니다. Java Archi주석을 사용하여 변환하는 라이브러리인 XML 바인딩에 대한 강의 Java 개체를 XML 콘텐츠로 변환하거나 그 반대의 경우도 마찬가지입니다. JAXB는 사양을 통해 정의되므로 이 표준에 대해 다양한 구현을 사용할 수 있습니다.

JAXB를 사용하면 종종 다음과 같은 기본 주석을 사용합니다.

  • @XmlRootElement: 이 주석은 XML 파일의 가장 바깥쪽 태그가 무엇인지 지정하므로 클래스 위에 선언됩니다.
  • @XmlElementWrapper: 이 주석은 컬렉션 주위에 래퍼 XML 요소를 만듭니다.
  • @XmlElement: 객체의 속성을 선언하는 데 사용되는 이 주석은 XML 파일의 태그입니다.
  • @XmlAttribute: 객체의 속성을 선언하는 데에도 사용되는 이 주석은 XML 파일의 태그입니다.

일반적인 구현을 위한 구문은 다음과 같습니다. 먼저 초기화를 해보겠습니다. JAXB컨텍스트 개체 내 개체 변환할 개체입니다.

JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);

이번에 JAXB컨텍스트 개체에는 XML 콘텐츠를 형식으로 변환하는 개체를 생성하는 메서드가 있습니다. Java 목적, 언마샬러.

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

이번에 JAXB컨텍스트 객체에는 객체를 변환하는 객체를 생성하는 메서드가 있습니다. Java XML 콘텐츠에 대한 객체입니다. 마샬러.

Marshaller marshallerObj = jaxbContext.createMarshaller();

XML을 JSON으로 변환하는 방법은 무엇입니까?

우리는 플랫폼에서 XML – JSON 변환의 예를 구현합니다.

  • JDK 8을 엽니다. Ubuntu 18.04 x64.
  • Eclipse IDE 2019-03(4.11.0) x64 Java 개발 Ubuntu.
  • 그손2.8.5.

단계 1) 프로젝트를 만듭니다.
새 항목 만들기 Java 계획.

새 항목 만들기 Java 계획.
새 항목 만들기 Java 계획.

단계 2) 프로젝트 이름을 설정합니다.
설정된 프로젝트 이름은 다음과 같습니다. XmlToJson예제.

프로젝트 이름 설정

프로젝트 이름을 설정합니다.

단계 3) 폴더를 만듭니다.
폴더 만들기 데이터 투입 두 개의 파일이 포함된 샘플.xml 그리고 샘플.json.

폴더 데이터 생성

폴더 데이터/입력을 생성합니다.

먼저 XML을 다음과 같이 정의해 보겠습니다. , 역할 그리고 사람 속성.

일반적인 아키텍처는 다음과 같습니다. ; .

개체 관계

개체 관계.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
	<department>
		<roles>
			<role id="1">
				<position>head</position>
				<salary>10k</salary>
			</role>
			<role id="2">
				<position>manager</position>
				<salary>8k</salary>
			</role>
			<role id="3">
				<position>employee</position>
				<salary>5k</salary>
			</role>
		</roles>
		<persons>
			<person id="1">
				<name>Red</name>
				<role>1</role>
			</person>
			<person id="2">
				<name>Green</name>
				<role>2</role>
			</person>
			<person id="3">
				<name>Blue</name>
				<role>2</role>
			</person>
			<person id="4">
				<name>Yellow</name>
				<role>3</role>
			</person>
			<person id="5">
				<name>Brown</name>
				<role>3</role>
			</person>
		</persons>
	</department>
</root>

둘째, 동일한 아이디어를 가지고 JSON을 정의합니다.

{
	"roles": [
		{
			"id": "1",
			"position": "head",
			"salary": "10k",
			"persons": [
				{
					"id": "1",
					"name": "Red"
				}
			]
		},
		{
			"id": "2",
			"position": "manager",
			"salary": "8k",
			"persons": [
				{
					"id": "2",
					"name": "Green"
				},
				{
					"id": "3",
					"name": "Blue"
				}
			]
		},
		{
			"id": "3",
			"position": "employee",
			"salary": "5k",
			"persons": [
				{
					"id": "4",
					"name": "Yellow"
				},
				{
					"id": "5",
					"name": "Brown"
				}
			]
		}
	]	
}

단계 4) 객체를 정의합니다.
패키지에서 해당 개체 클래스를 정의합니다. 모델.

객체 클래스 정의

객체 클래스를 정의합니다.

  • Role.java:
@XmlRootElement(name = "role")
public class Role {
	private String id;
	private String position;
	private String salary;
	public Role() {
		super();
	}
	public Role(String id, String position, String salary) {
		super();
		this.id = id;
		this.position = position;
		this.salary = salary;
	}
	@XmlAttribute(name = "id")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@XmlElement(name = "position")
	public String getPosition() {
		return position;
	}
	public void setPosition(String position) {
		this.position = position;
	}
	@XmlElement(name = "salary")
	public String getSalary() {
		return salary;
	}
	public void setSalary(String salary) {
		this.salary = salary;
	}
}
  • Person.java:
@XmlRootElement(name = "person")
public class Person {
	private String id;
	private String name;
	private String role;
	public Person() {
		super();
	}
	public Person(String id, String name, String role) {
		super();
		this.id = id;
		this.name = name;
		this.role = role;
	}
	@XmlAttribute(name = "id")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@XmlElement(name = "name")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	@XmlElement(name = "role")
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}
}
  • 부서.java:
@XmlRootElement(name = "department")
public class Department {
	private List<Role> roles;
	private List<Person> persons;
	public Department() {
		super();
	}
	public Department(List<Role> roles, List<Person> persons) {
		super();
		this.roles = roles;
		this.persons = persons;
	}
	@XmlElementWrapper(name = "roles")
	@XmlElement(name = "role")
	public List<Role> getRoles() {
		return roles;
	}
	public void setRoles(List<Role> roles) {
		this.roles = roles;
	}
	@XmlElementWrapper(name = "persons")
	@XmlElement(name = "person")
	public List<Person> getPersons() {
		return persons;
	}
	public void setPersons(List<Person> persons) {
		this.persons = persons;
	}
}

XMLModel.java:

@XmlRootElement(name = "root")
public class XMLModel {

	private Department department;

	public XMLModel() {
		super();
	}

	public XMLModel(Department department) {
		super();
		this.department = department;
	}

	@XmlElement(name = "department")
	public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

}

단계 5) 라이브러리를 설정합니다.
라이브러리 Gson 2.8.5 추가 및 설정 Java 빌드 경로.

라이브러리 Gson 설정

라이브러리 Gson 2.8.5 추가 Java 빌드 경로

라이브러리 Gson 2.8.5 추가 Java 빌드 경로.

XML 메시지를 다음으로 변환 Java JAXB를 사용하는 객체

먼저, 패키지로 분류된 수행을 정의합니다. 서비스.

수행 클래스 정의

수행 클래스를 정의합니다.

첫 번째 프로세스의 첫 번째 단계에서는 JAXB의 Un-marshalling 기술을 사용합니다.

언마샬링은 클라이언트 애플리케이션에 XML 데이터를 JAXB 파생 데이터로 변환하는 기능을 제공합니다. Java 사물.

우리는 기능을 정의합니다 getObjectFromXml파일 XML 파일을 다시 정렬 해제하려면 Java 물체. 이 함수는 클래스에 정의되어 있습니다. XML서비스.

public XMLModel getObjectFromXmlFile(String filePath) {
	try {
		File file = new File(filePath);
		JAXBContext jaxbContext = JAXBContext.newInstance(XMLModel.class);

		Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
		XMLModel root = (XMLModel) jaxbUnmarshaller.unmarshal(file);

		return root;
	} catch (JAXBException e) {
		e.printStackTrace();
		return null;
	}
}

우리는 수업시간에 위의 코드를 호출합니다. XmlToJsonService.

XMLService xmlService = new XMLService();
XMLModel xmlModel = xmlService.getObjectFromXmlFile(filePathIn);

Department department = xmlModel.getDepartment();
List<Role> roles = department.getRoles();
List<Person> persons = department.getPersons();

그런 다음 다음 단계로 넘어갑니다.

개 심자 Java Gson을 사용하여 객체를 JSON 메시지로 변환

이 단계에서는 함수를 정의합니다. writeDataToJson파일 JSON 파일에 데이터를 씁니다. 이 함수는 클래스에 정의되어 있습니다. JSON서비스.

JSON 문자열 목록을 작성하려면 다음 함수를 사용합니다. 시작 배열() 그리고 끝 배열(). 이 두 함수 사이에 각 JSON 문자열을 작성합니다.

public void writeDataToJsonFile(String filePath, List<Role> roles, List<Person> persons) {
	try {
		JsonWriter writer = new JsonWriter(new FileWriter(filePath));
		writer.setIndent("    ");
		writer.beginObject();
		writer.name("roles");
		writer.beginArray();
		for (Role role : roles) {
			writer.beginObject();
			writer.name("id").value(role.getId());
			writer.name("position").value(role.getPosition());
			writer.name("salary").value(role.getSalary());
			writer.name("persons");
			writer.beginArray();
			for (Person person : persons) {
				if (person.getRole().equalsIgnoreCase(role.getId())) {
					writer.beginObject();
					writer.name("id").value(person.getId());
					writer.name("name").value(person.getName());
					writer.endObject();
				}
			}
			writer.endArray();
			writer.endObject();
		}
		writer.endArray();
		writer.endObject();
		writer.close();
	} catch (IOException e) {
	}
}

위의 코드를 클래스에서 호출합니다. XmlToJsonService.

JsonService jsonService = new JsonService();
jsonService.writeDataToJsonFile(filePathOut, roles, persons);

첫 번째 과정입니다.

JSON 메시지를 다음으로 변환 Java Gson을 사용하는 객체

두 번째 프로세스의 첫 번째 단계에서는 함수를 정의합니다. getDataFromJson파일 JSON 파일에서 데이터를 읽습니다. 이 함수는 클래스에 정의되어 있습니다. JSON서비스.

JSON 문자열 목록을 읽으려면 다음 함수를 사용합니다. 시작 배열() 그리고 끝 배열(). 이 두 함수 사이에서 각 JSON 문자열을 읽습니다.

public void getDataFromJsonFile(String filePath, List<Role> roles, List<Person> persons) {
	try {
		JsonReader reader = new JsonReader(new FileReader(filePath));
		reader.beginObject();
		while (reader.hasNext()) {
			String nameRoot = reader.nextName();
			if (nameRoot.equals("roles")) {
				reader.beginArray();
				while (reader.hasNext()) {
					reader.beginObject();
					Role role = new Role();
					while (reader.hasNext()) {
						String nameRole = reader.nextName();
						if (nameRole.equals("id")) {
							role.setId(reader.nextString());
						} else if (nameRole.equals("position")) 
					        { role.setPosition(reader.nextString());
						} else if (nameRole.equals("salary")) {
						  role.setSalary(reader.nextString());
						} else if (nameRole.equals("persons")) {
							reader.beginArray();
							while (reader.hasNext()) {
								reader.beginObject();

Person person = new Person();

						person.setRole(role.getId());

						while (reader.hasNext()) {
						String namePerson = reader.nextName();

							if (namePerson.equals("id")) {
						person.setId(reader.nextString());
						} else if (namePerson.equals("name")) {
						person.setName(reader.nextString());
							}
						}
								persons.add(person);
								reader.endObject();
							}
							reader.endArray();
						}
					}
					roles.add(role);
					reader.endObject();
				}
				reader.endArray();
			}
		}
		reader.endObject();
		reader.close();
	} catch (IOException e) {

	}
}

위의 코드를 클래스에서 호출합니다. XmlToJsonService.

JsonService jsonService = new JsonService();
List<Role> roles = new ArrayList<>();
List<Person> persons = new ArrayList<>();

jsonService.getDataFromJsonFile(filePathIn, roles, persons);

Json을 XML로 변환하는 방법 Java?

JSON을 XML로 in JAVA JSONObject를 사용하여 변환됩니다. json = new JSONObject(str); 끈 xml = XML. 유효한 dtd 파일이나 xml 파일이 있으면 json을 xml로 변환하고 xml을 json으로 변환하는 것이 매우 쉽습니다.

그런 다음 다음 단계로 넘어갑니다.

개 심자 Java JAXB를 사용하여 객체를 XML 메시지로 변환

이 단계에서는 JAXB의 Marshalling 기술을 사용합니다.

마샬링은 클라이언트 애플리케이션에 JAXB 파생 데이터를 변환하는 기능을 제공합니다. Java 개체 트리를 XML 데이터로 변환합니다.

우리는 마샬링을 위해 parseObjectToXm 함수를 정의합니다. Java 개체를 XML 메시지로 변환합니다. 이 함수는 클래스에 정의되어 있습니다.

XMLService.
public void parseObjectToXml(String filePath, XMLModel xmlModel) {
	try {
		JAXBContext contextObj = JAXBContext.newInstance(XMLModel.class);

		Marshaller marshallerObj = contextObj.createMarshaller();
		marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

		marshallerObj.marshal(xmlModel, new FileOutputStream(filePath));
	} catch (JAXBException je) {
		System.out.println("JAXBException");
	} catch (IOException ie) {
		System.out.println("IOException");
	}
}

위의 코드를 클래스에서 호출합니다. XmlToJsonService.

XMLService xmlService = new XMLService();
XMLModel xmlModel = new XMLModel();

Department department = new Department();
department.setRoles(roles);
department.setPersons(persons);

xmlModel.setDepartment(department);

xmlService.parseObjectToXml(filePathOut, xmlModel);

두 번째 과정입니다.

결론

이 튜토리얼에서는 JAXB가 XML 데이터를 읽고 Gson이 이를 JSON에 쓰는 한 가지 방법을 간략하게 배웠습니다. 반대로 우리는 Gson이 읽는 방식도 보았습니다. JSON 데이터와 JAXB는 이를 XML에 씁니다.