JSON'u XML'e dönüştür Java Gson ve JAXB kullanarak

⚡ Akıllı Özet

JSON'u XML'e dönüştür Java Gson ve JAXB kullanarak harita üzerindenping her iki format da aynı açıklamalı dosyaya Java Bu makale, her bir formatı tanımlar, projeyi kurar, JAXB ile XML'i çözümler, Gson ile JSON yazar ve tüm süreci tersine çevirir.

  • 🗝️ JSON Yapısı: Veriler, süslü parantezler içinde anahtar ve değer çiftleri olarak saklanır ve her giriş virgülle ayrılır.
  • ???? ️ XML Yapısı: Veriler iç içe düğümlerde saklanır ve her açılış etiketi, eşleşen bir kapanış etiketi gerektirir.
  • 🔗 Paylaşımlı Model: Bir dizi açıklamalı Java Sınıflar bir köprü görevi görür, bu nedenle formatlardan hiçbiri doğrudan diğerine ayrıştırılmaz.
  • 📥 Sıralamanın çözülmesi: JAXB bir XML dosyasını okur ve doldurulmuş bir liste döndürür. Java Unmarshaller sınıfı aracılığıyla nesne ağacı.
  • 📤 Akışlı Yazma: Gson JsonWriter beginObject, name, value ve endObject çağrılarıyla JSON'u artımlı olarak üretir.
  • 🔄 Reverse Yol: JsonReader, nesneleri JSON'dan yeniden oluşturur ve JAXB Marshaller bunları XML olarak geri yazar.
  • ⚠️ Çalışma Zamanı Notu: JAXB, JDK'yı terk etti. Java 11, bu nedenle jakarta.xml.bind bağımlılığının açıkça eklenmesi gerekiyor.

JSON'u XML'e dönüştürün Java

JSON nedir?

JSON, bir kısaltmadır JavaJSON (Script Object Notation), çoğu programlama dilinin okuyabileceği kurallara uyan bir veri formatıdır. Kolayca bir dosyaya kaydedebilir veya bir veritabanında saklayabiliriz. JSON formatı, verileri tanımlamak için anahtar-değer çiftlerini kullanır.

Aşağıdaki örnekte, kişisel bilgileri saklayan bir JSON dizesi tanımlıyoruz:

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

Dolayısıyla JSON'un sözdizimi çok basittir. Her veri öğesinin iki bölümü vardır: bir anahtar ve bir değer; bunlar bir kayıttaki alan adına ve değerine karşılık gelir. Daha yakından bakıldığında, şöyle birkaç kural vardır:

  • JSON dizesi küme parantezleri {} içine alınır.
  • JSON anahtarları çift tırnak içine alınmalı ve dize değerleri de tırnak içinde belirtilmelidir.
  • Eğer daha fazla veri varsa (daha fazla anahtar => değer çifti), bunları ayırmak için virgül (,) kullanırız.
  • JSON anahtarları, boşluk içermeyen, yalnızca düz harfler, rakamlar veya alt çizgi karakterinden oluşmalıdır ve ilk karakter bir rakam olmamalıdır.

XML nedir?

XML, Dünya Çapında Web Konsorsiyumu tarafından önerilen Genişletilebilir İşaretleme Dili'nin kısaltmasıdır.https://www.w3.org/(Diğer işaretleme dillerini oluşturmak için kullanılır.) Bu, birçok farklı veri türünü tanımlayabilen basit bir alt kümedir, bu nedenle sistemler arasında veri paylaşımı için çok kullanışlıdır.

XML'deki etiketler genellikle önceden tanımlanmamıştır ancak kullanıcı kurallarına göre oluşturulmuştur. XML HTML'nin avantajlarına dayalı yeni özellikler sunar.

Çeşitli sistemler ve çözümler için kullanışlı bazı XML özellikleri mevcuttur:

  • XML genişletilebilir: XML, uygulamanıza uyacak şekilde kendi özel etiketlerinizi oluşturmanıza olanak tanır.
  • XML veri taşır, görüntülemez: XML, verilerin nasıl görüntüleneceğinden bağımsız olarak saklanmasına olanak tanır.
  • XML ortak bir standarttır: XML, World Wide Web Konsorsiyumu (W3C) tarafından geliştirilmiştir ve açık standart olarak mevcuttur.

XML, iç içe geçmiş düğüm yapısı üzerine kuruludur. Her düğümün aşağıdaki gibi bir açılış etiketi ve bir kapanış etiketi vardır:

<node>content</node>

Hangi:

  • Bu açık bir etikettir ve bu etiketin adı sizin tarafınızdan belirlenir.
  • `<title>` etiketi kapanış etiketidir ve bu etiketin adı açılış etiketinin adıyla aynı olmalıdır.
  • içerik bu etiketin içeriğidir.

Her XML dosyasının en üstünde, kullanılan XML sürümünü belirtmek için bir etiket tanımlamanız gerekir. Talimat etiketinin sözdizimi şu şekildedir:

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

JSON ve XML: Temel Farklar

Her iki format da yapılandırılmış veri içerir ve aşağıdaki tablo, bir projenin neden bu formatlar arasında geçiş yapması gerekebileceğini göstermektedir.

Parametre JSON XML
Sözdizimi stili Anahtar ve değer çiftleri İç içe etiketler
Veri tipleri Dize, sayı, mantıksal değer, boş değer, dizi, nesne Yalnızca metin, türler bir şemadan gelir.
Özellikler Desteklenmez Herhangi bir öğede desteklenir.
Yorumlar Desteklenmez destekli
lâf salatası Kompakt Etiketler tekrarlandığı için daha ayrıntılı.
Şema doğrulaması JSON Şeması, isteğe bağlı DTD ve XSD, olgun
Tipik kullanım Web API'leri ve yapılandırması Kurumsal mesajlaşma ve belgeler

Gson nedir?

Gson (https://github.com/google/gson) Bir Java Kullanıcıların dönüştürmesine olanak tanıyan bir kütüphane Java Nesneyi bir JSON dizesine dönüştürmek ve ayrıca bir JSON dizesini tekrar nesneye dönüştürmek. Java nesne. Gson keyfi olarak çalışabilir Java Kaynak koduna sahip olmadığınız mevcut nesneler de dahil olmak üzere nesneler.

Gson, 1.6 sürümünden itibaren iki sınıf sunmaktadır. JsonReader hem de JsonWriterJSON verilerinin akışlı işlenmesini sağlamak.

  • JsonWriter – JSON'a akış halinde yazma. Bir dosya oluşturuyoruz. JsonWriter JSON nesnesi oluşturmaya başlamak ve bitirmek için çeşitli fonksiyonları kullanırız. beginObject() hem de endObject()Bu iki çağrı arasında, verileri çiftler halinde (anahtar => değer) yazıyoruz.
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
  • JsonReader – JSON'dan akışlı okuma. Bir JsonReader nesnesi oluşturuyoruz. JSON nesnesini okumaya başlamak ve bitirmek için beginObject() ve endObject() fonksiyonlarını kullanıyoruz. Bu iki çağrı arasında verileri çiftler halinde (anahtar => değer) okuyoruz.
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
	String name = reader.nextName();
	if (name.equals("key")) {
		String value = reader.nextString();
	}
}
reader.endObject();

Gson akış işleme hızlıdır. Ancak, JSON verilerindeki her bir anahtar => değer çiftini kendiniz işlemeniz gerekir.

JAXB nedir?

JAXB'nin açılımı Java Archidönüştürmek için ek açıklamaları kullanan bir kitaplık olan XML Bağlama için yapı Java Nesneleri XML içeriğine ve XML içeriğini nesnelere dönüştürebilir. JAXB bir spesifikasyonla tanımlandığı için, bu standardın farklı uygulamalarını kullanabiliriz.

JAXB ile genellikle aşağıdaki temel açıklamaları kullanırız:

  • @XmlRootElementBu açıklama, XML dosyasının en dıştaki etiketini belirtir ve bu nedenle bir sınıfın üstünde tanımlanır.
  • @XmlElementWrapper: Bu ek açıklama, koleksiyonların etrafında bir sarmalayıcı XML öğesi oluşturur.
  • @XmlElementBu açıklama, nesnenin bir özelliğinin XML dosyasının alt etiketi haline geldiğini belirtir.
  • @XmlAttributeBu açıklama, nesnenin bir özelliğinin çevreleyen etiketin bir özniteliği haline geldiğini belirtir.

Genel uygulama şu şekildedir. İlk olarak, başlatma işlemini gerçekleştiriyoruz. JAXBBağlam ile nesne Nesnem Dönüştürülecek sınıf.

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

Bu JAXBBağlam Bu nesnenin, XML içeriğini dönüştüren bir nesne oluşturan bir yöntemi vardır. Java nesne, Düzenleyici.

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Aynısı JAXBBağlam Nesnenin ayrıca, bir nesneyi dönüştüren bir yöntemi de vardır. Java nesneyi XML içeriğine dönüştürmek, Marshall.

Marshaller marshallerObj = jaxbContext.createMarshaller();

⚠️Uyarı: JAXB, JDK'den kaldırıldı. Java 11. üzerinde Java 11 ve sonraki sürümlerde, API'yi ve çalışma zamanı uygulamasını projeye açıkça ekleyin, örneğin jakarta.xml.bind:jakarta.xml.bind-api Birlikte org.glassfish.jaxb:jaxb-runtimeve ek açıklamaları şuradan içe aktarın: jakarta.xml.bind.annotation yerine javax.xml.bind.annotation.

XML'i JSON'ye nasıl dönüştürebilirim?

XML'den JSON'a dönüştürme örneğini aşağıdaki platformda uyguluyoruz. Ekran görüntülerinde kullanılan sürümler aşağıdadır. JDK'nın daha yeni sürümleri, EclipseGson da aynı şekilde çalışır, ancak yukarıdaki JAXB notuna tabidir.

  • OpenJDK 8 için Ubuntu 18.04 x64.
  • Eclipse IDE 2019-03 (4.11.0) x64 Java İçin geliştirme Ubuntu.
  • Gson 2.8.5.

) 1 Adım Proje oluşturun.
Yeni bir tane oluştur Java projesi.

Yeni bir tane oluştur Java Projesi.

) 2 Adım Proje adını belirleyin.
Proje adını şu şekilde ayarlayın: XmlToJsonÖrnek.

Proje adını ayarla

) 3 Adım Bir klasör oluşturun.
Klasörü oluşturun veri girişi iki dosyayı içeren örnek.xml hem de örnek.json.

Klasör verileri oluştur

Öncelikle XML dosyamızı şu şekilde tanımlayalım: bölüm, rol, ve kişi özellikleri.

Genel yapı şu şekildedir: bir departmanın birçok rolü vardır ve bir rolün de birçok kişisi vardır. Aşağıdaki diyagram bu ilişkileri göstermektedir.

Nesne İlişkileri

<?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>

İkinci olarak, aynı fikri ifade eden JSON'u tanımlıyoruz. Düz kişi listesinin her rolün içinde iç içe geçmiş bir diziye dönüştüğüne dikkat edin; bu, dönüştürme kodunun gerçekleştirdiği dönüşümün aynısıdır.

{
	"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 Adım Nesneleri tanımlayın.
Paket içerisinde ilgili nesne sınıflarını tanımlayın. model.

Nesne sınıflarını tanımlayın

Rol.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;
	}
}

kişi.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;
	}
}

Bölüm.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 Adım Kütüphaneyi kurun.
Gson 2.8.5 kütüphanesini ekleyin ve kurun. Java Yol Oluştur.

Gson kitaplığını ayarlama

Gson 2.8.5 kütüphanesini ekleyin Java Yol Oluştur

Eğer proje kullanıyorsa Maven Elle eklenen bir jar dosyası yerine, aynı kütüphaneler bağımlılık olarak tanımlanmıştır. Ekran görüntülerine uyması için 2.8.5 sürümü buraya sabitlenmiştir ve daha sonraki herhangi bir Gson sürümü bu örnek için aynı şekilde çalışır:

<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>

    <!-- required on Java 11 and later -->
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
    </dependency>
</dependencies>

XML mesajını şuna dönüştür: Java JAXB kullanan nesneler

Öncelikle, paket içindeki performans sınıflarını tanımlıyoruz. hizmet.

Performans sınıflarını tanımlayın

İlk sürecin ilk adımında, JAXB'nin sıralama çözme tekniğini kullanıyoruz.

XML verilerini JAXB türetilmiş biçime dönüştürme yeteneği, istemci uygulamasına XML verilerini dönüştürme olanağı sağlar. Java nesneler.

Fonksiyonu tanımlıyoruz getObjectFromXmlFile XML dosyamızı tekrar bir dosyaya dönüştürmek için Java Nesne. Bu fonksiyon sınıf içinde tanımlanmıştır. XML Hizmeti.

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;
	}
}

Yukarıdaki kodu sınıf içinde çağırıyoruz. XmlToJsonServisi.

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

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

Bu noktada XML dosyası üç hale geldi. Java Bellekteki nesneler. Sonraki adımda bunlar JSON formatında yazdırılır.

dönüştürmek Java Gson kullanarak JSON mesajına itiraz ediyor

Bu aşamada fonksiyonu tanımlıyoruz. WriteDataToJsonFile Verileri JSON dosyasına yazmak için kullanılır. Bu fonksiyon sınıf içerisinde tanımlanmıştır. JsonServisi.

JSON nesnelerinden oluşan bir liste yazmak için fonksiyonları kullandığımızı unutmayın. beginArray() hem de endArray()Bu iki çağrı arasında her bir JSON nesnesini yazıyoruz.

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) {
	}
}

Yukarıdaki kodu sınıf içinde çağırıyoruz. XmlToJsonServisi.

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

Bu ilk işlem. İç döngü, her kişiyi mevcut rol kimliğiyle eşleştirir; bu sayede düz XML kişi listesi iç içe geçmiş bir JSON dizisine dönüşür.

JSON mesajını şuna dönüştür: Java Gson kullanan nesneler

İkinci sürecin ilk adımında, fonksiyonu tanımlıyoruz. getDataFromJsonFile JSON dosyasından veri okumak için kullanılır. Bu fonksiyon sınıf içerisinde tanımlanmıştır. JsonServisi.

JSON nesnelerinin listesini okumak için fonksiyonları kullandığımızı unutmayın. beginArray() hem de endArray()Bu iki çağrı arasında her bir JSON nesnesini okuyoruz.

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) {

	}
}

Yukarıdaki kodu sınıf içinde çağırıyoruz. XmlToJsonServisi.

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

jsonService.getDataFromJsonFile(filePathIn, roles, persons);

dönüştürmek Java JAXB kullanarak XML mesajına nesneler

Bu aşamada JAXB'nin veri sıralama tekniğini kullanıyoruz.

Marshalling, bir istemci uygulamasına JAXB'den türetilmiş bir kodu dönüştürme yeteneği sağlar. Java nesne ağacını XML verilerine dönüştürür.

Fonksiyonu tanımlıyoruz parseObjectToXml bir araya getirmek Java XML mesajına nesne ekler. Bu fonksiyon, ilgili sınıfta tanımlanmıştır. XML Hizmeti.

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");
	}
}

Yukarıdaki kodu sınıf içinde çağırıyoruz. XmlToJsonServisi.

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

Bu ikinci işlem. Oluşturulan dosya orijinal sample.xml ile eşleşiyor, bu da gidiş-dönüş işleminin her değeri koruduğunu doğruluyor.

JSON'u XML'e Nasıl Dönüştürürsünüz? Java Model Sınıfı olmadan mı?

Yukarıdaki yaklaşım, yapı biliniyor ve istikrarlı olduğunda doğru seçimdir, çünkü açıklama eklenmiş sınıflar yapıyı belgelemektedir.tracYapının bilinmediği veya sık sık değiştiği durumlarda, genel bir dönüştürücü daha hızlıdır.

MKS org.json Kütüphane, herhangi bir model sınıfı kullanmadan, dönüşümü iki satırda gerçekleştiriyor:

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

public class QuickConverter {

    public static void main(String[] args) {
        String str = "{\"username\":\"guru99user\",\"email\":\"guru99user@mail.com\"}";

        JSONObject json = new JSONObject(str);
        String xml = XML.toString(json);

        System.out.println(xml);
    }
}

Çıktı:

<username>guru99user</username><email>guru99user@mail.com</email>

Genel rotanın kök öğe veya öznitelik üretmediğini unutmayın, bu nedenle XML.toString(json, "root") Normalde gereklidir. Aşağıdaki tabloda iki yaklaşım yan yana gösterilmiştir.

Kriter Gson, JAXB ile birlikte org.json genel dönüştürme
Model sınıfları gereklidir Evet Yok hayır
Yapı üzerindeki kontrol Özellikleri de dahil olmak üzere eksiksiz. Sınırlı, yalnızca unsurlar
Reşaping veri İç içe geçmiş kişilerle gösterildiği gibi mümkün. Mümkün değil
Kod satırları çok İki
İçin en iyisi Kararlı, belgelenmiş şemalar Geçici veya bilinmeyen yapılar

JAXB XML verilerini okur ve Gson bunları JSON'a yazar; ters yol ise Gson'u kullanarak verileri okur. JSON JAXB verileri XML'e geri yazarken, veriler bu şekilde işlenir. Daha fazla bilgi için inceleyin. XML temeller, daha geniş Java öğretici, ve Jasper RaporlarıBu, her iki formatı da rapor veri kaynağı olarak kullanan bir sistemdir.

SSS

JAXB, JDK'den kaldırıldı. Java 11. jakarta.xml.bind API'sini jaxb-runtime gibi bir çalışma ortamıyla birlikte ekleyin ve içe aktarmaları javax'tan jakarta'ya güncelleyin.

Hayır. Gson yalnızca JSON'u işler. XML önce dönüştürülmelidir. Java Gson'un serileştirebilmesi için nesneler JAXB veya Jackson XML gibi başka bir ayrıştırıcı aracılığıyla işlenir.

XmlElement, değeri içeren bir alt etiket oluştururken, XmlAttribute değeri üst etiketin açılış etiketine yerleştirir. Nitelikler iç içe yapılar içeremez.

Akış yöntemi bellek kullanımını düşük tutar ve çıktı yapısının girdi sınıflarından farklı olmasına olanak tanır; bu da burada kişilerin rollerin içine yerleştirildiği durumlarda tam olarak gerçekleşen şeydir.

Evet, örnek bir XML belgesinden. Koleksiyonlardaki sarmalayıcı ek açıklamalarını doğrulayın, çünkü oluşturulan sınıflar genellikle XmlElementWrapper'ı atlar ve düzleştirilmiş bir yapı üretir.

JSON ve satır ayırıcılarla tanımlanmış varyantı, doğrudan eşlenebildikleri için baskın konumdadır. Python Sözlükler ve veri akışları verimli bir şekilde işlenir. XML, eski kurumsal sistemlerin kaynak verileri sağladığı yerlerde hala karşımıza çıkmaktadır.

Bu yazıyı şu şekilde özetleyin: