工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

例でGsonとJAXBを使用してJSONをXML Javaに変換する

JSON とは

JSON は Javascript Object Notation の略で、現在ほとんどのプログラミング言語が読み取り可能であるという特定の規則に従うデータ形式です。データベースのファイルまたはレコードに簡単に保存できます。 JSON 形式は、キーと値のペアを使用してデータを記述します。

例に従って、個人情報を格納する JSON 文字列を定義します:

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

したがって、JSON の構文は非常に単純です。各データ情報には、特定のレコードのフィールド名とその値に対応するキーと値の 2 つの部分があります。しかし、さらに調べてみると、次のようなことがいくつかあります:

このチュートリアルでは、次のことを学びます-

XML とは

XML は eXtensible Markup Language の略で、他のマークアップ言語を作成するために World Wide Web Consortium (https://www.w3.org/) によって提案された拡張可能なマークアップ言語とも呼ばれます。これは、さまざまな種類のデータを記述できる単純なサブセットであるため、システム間でデータを共有する場合に非常に役立ちます。

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 には 2 つの新しいクラスが導入されています – JsonReaderJsonWriter 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 データを処理する各ペア (キー => 値) を処理する必要があります。

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 .プロジェクトを作成します。
新しい Java プロジェクトを作成します。

ステップ 2 .プロジェクト名を設定します。
プロジェクト名を XmlToJsonExample に設定します .

ステップ 3 .フォルダを作成します。
data/input フォルダを作成します 2 つのファイル sample.xml を含む および sample.json .

まず department で XML を定義しましょう 、役割

一般的なアーキテクチャは次のとおりです。 <1 つの部門 – 多くの役割>; <1 つの役割 – 多くの人>.

<?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 .オブジェクトを定義します。
パッケージ model で対応するオブジェクト クラスを定義します .

  • 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 .ライブラリをセットアップします。
ライブラリ Gson 2.8.5 を Java ビルド パスに追加してセットアップします。

JAXB を使用して XML メッセージを Java オブジェクトに変換する

まず、パッケージ service にクラス分けされた実行を定義します .

最初のプロセスの最初のステップで、JAXB のアンマーシャリング技術を使用します。

アンマーシャリングは、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() .これら 2 つの関数の間に、各 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 オブジェクトに変換する

2 番目のプロセスの最初のステップで、関数 getDataFromJsonFile を定義します。 JSONファイルからデータを読み取る。この関数はクラス JsonService で定義されています .

JSON 文字列のリストを読み取るには、関数 beginArray() を使用することに注意してください。 と endArray() .これら 2 つの関数の間で、各 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);

それが 2 番目のプロセスです。

結論

このチュートリアルでは、JAXB が XML データを読み取り、Gson がそれを JSON に書き込む 1 つの方法を簡単に学びました。反対に、Gson が JSON データを読み取り、JAXB がそれを XML に書き込む方法も確認しました。


Java

  1. C++ クラスとオブジェクトと例
  2. Java Hello World:サンプルを使用して初めての Java プログラムを作成する方法
  3. 例を使用した Java OOP でのカプセル化
  4. Java の String Length() メソッド:例で見つける方法
  5. Java String charAt() メソッドと例
  6. Java String contains() メソッド |部分文字列を例でチェック
  7. 例を使用したJava文字列のendsWith()メソッド
  8. Java BufferedReader:例を使用して Java でファイルを読み取る方法
  9. 再帰およびループ プログラムを使用した Java のフィボナッチ数列
  10. プログラム例を使用した Java の挿入ソート アルゴリズム
  11. 例を使用したJavaプログラムでの選択ソート