산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

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

JSON이란 무엇입니까?

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

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

{
"username" : "guru99user",
"email" : "[email protected]"	
}

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

이 튜토리얼에서는 배우게 될 것입니다-

XML이란 무엇입니까?

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

XML의 태그는 미리 정의되지 않은 경우가 많지만 사용자 규칙에 따라 생성됩니다. XML은 HTML의 장점을 기반으로 한 새로운 기능을 도입했습니다.

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

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

<node>content</node>

중:

각 XML 파일의 맨 위에는 XML이 사용 중인 버전을 나타내는 태그를 선언해야 합니다. 명령어 태그의 구문:

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

Gson이란 무엇입니까?

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

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

JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.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 데이터 처리의 각 쌍(key => 값)을 처리해야 합니다.

JAXB란 무엇입니까?

JAXB는 Java Architecture for XML Binding의 약자로 주석을 사용하여 Java 객체를 XML 콘텐츠로 또는 그 반대로 변환하는 라이브러리입니다. JAXB는 사양을 통해 정의되므로 이 표준에 대해 다른 구현을 사용할 수 있습니다.

JAXB에서는 다음과 같은 기본 주석을 자주 사용합니다.

일반적인 구현을 위한 구문은 다음과 같습니다. 먼저 JAXBContext를 초기화합니다. MyObject가 있는 개체 변환할 개체입니다.

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

JAXBContext에서 개체, XML 콘텐츠를 Java 개체, Unmarshaller로 변환하는 개체를 만드는 메서드가 있습니다. .

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

JAXBContext에서 객체에 Java 객체를 Marshaller인 XML 콘텐츠로 변환하는 객체를 생성하는 메소드가 있습니다. .

Marshaller marshallerObj = jaxbContext.createMarshaller();

XML을 JSON으로 변환하는 방법

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

1단계 . 프로젝트를 생성합니다.
새 자바 프로젝트를 생성합니다.

2단계 . 프로젝트 이름을 설정합니다.
설정 프로젝트 이름은 XmlToJsonExample입니다. .

3단계 . 폴더를 생성합니다.
폴더 생성 데이터/입력 두 개의 파일 sample.xml 포함 및 sample.json .

먼저 department로 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;
	}

}
  • Department.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단계 . 라이브러리를 설정합니다.
Java 빌드 경로에 라이브러리 Gson 2.8.5를 추가하고 설정합니다.

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

먼저 패키지 service로 분류된 수행을 정의합니다. .

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

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

getObjectFromXmlFile 함수를 정의합니다. XML 파일을 다시 Java 객체로 비정렬화합니다. 이 함수는 XMLService 클래스에 정의되어 있습니다. .

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();

그럼 다음 단계로 넘어가겠습니다.

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

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

JSON 문자열 목록을 작성하려면 beginArray() 함수를 사용합니다. 및 endArray() . 이 두 함수 사이에 각 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);

이것이 첫 번째 과정입니다.

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

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

JSON 문자열 목록을 읽으려면 beginArray() 함수를 사용합니다. 및 endArray() . 이 두 함수 사이에서 각 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로 JAVA에서 JSONObject를 사용하여 변환됩니다. json =new JSONObject(str); 문자열 xml =XML . 유효한 dtd 파일이나 xml 파일이 있으면 json을 xml로, xml을 json으로 변환하는 것이 매우 쉽습니다.

그럼 다음 단계로 넘어가겠습니다.

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

이 단계에서는 JAXB의 마샬링 기법을 사용합니다.

마샬링은 JAXB 파생 Java 개체 트리를 XML 데이터로 변환하는 기능을 클라이언트 응용 프로그램에 제공합니다.

Java 객체를 XML 메시지로 마샬링하기 위해 parseObjectToXm 함수를 정의합니다. 이 함수는 클래스

에 정의되어 있습니다.
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에 쓰는 방식도 보았습니다.


java

  1. 예제가 있는 C++ 클래스 및 개체
  2. Java Hello World:예제를 사용하여 첫 번째 Java 프로그램을 작성하는 방법
  3. Java의 String Length() 메서드:예제로 찾는 방법
  4. 예제가 있는 Java 문자열 charAt() 메서드
  5. Java 문자열 contains() 메소드 | 예제로 하위 문자열 확인
  6. 예제가 포함된 Java 문자열 endWith() 메서드
  7. Java BufferedReader:예제를 사용하여 Java에서 파일을 읽는 방법
  8. 재귀 및 루프 프로그램을 사용하는 Java의 피보나치 수열
  9. 프로그램 예제가 있는 Java의 삽입 정렬 알고리즘
  10. 예제가 있는 Java 프로그램의 선택 정렬