JSON'u XML'e dönüştür Java Örnekle Gson ve JAXB'yi kullanma
JSON nedir?
JSON, bir kısaltmadır Javascript Nesne Gösterimi, çoğu programlama dilinin şu anda okunabilir olduğu belirli bir kuralı izleyen bir veri biçimidir. Bunu kolayca bir dosyaya veya veritabanındaki bir kayda kaydedebiliriz. JSON biçimi, verileri tanımlamak için anahtar-değer çiftlerini kullanır.
Örneği takip ederek kişisel bilgileri depolayan bir JSON dizesi tanımlayalım:
{
"username" : "guru99user",
"email" : "guru99user@mail.com"
}
Yani JSON'un sözdizimi çok basittir. Her veri bilgisinin iki bölümü olacaktır: alan adına ve belirli bir kayıttaki değerine karşılık gelen anahtar ve değer. Ancak daha ileri baktığımızda bunun gibi birkaç şey var:
- JSON dizesi küme parantezleri {} içine alınır.
- JSON'un anahtarları ve değerleri tırnak işaretleri {“} içine alınmalıdır.
- Daha fazla veri varsa (daha fazla anahtar => değer çifti), ayırmak için virgül (,) kullanırız.
- JSON anahtarları işaretsiz harf veya rakamdan oluşmalı, _ olmalı ve boşluk olmamalıdır, ilk karakter rakam olarak ayarlanmamalıdır.
XML nedir?
XML, World Wide Web Konsorsiyumu tarafından önerilen genişletilebilir işaretleme dili olarak da adlandırılan Genişletilebilir İşaretleme Dili anlamına gelir (https://www.w3.org/) diğer işaretleme dillerini oluşturmak için. Bu, birçok farklı veri türünü tanımlayabilen basit bir alt kümedir, dolayısıyla sistemler arasında veri paylaşımında çok faydalı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 sistemlerde ve çözümlerde bazı daha kullanışlı XML oluşturma özellikleri vardır:
- XML genişletilebilir: XML, uygulamanıza uyacak şekilde kendi özel etiketlerinizi oluşturmanıza olanak tanır.
- XML verileri taşır, görüntülemez: XML, nasıl görüntüleneceğine bakılmaksızın verileri saklamanıza 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ş bir düğüm yapısı üzerine kurulmuştur. Her düğümün aşağıdaki gibi bir açılış etiketi ve bir kapanış etiketi olacaktır:
<node>content</node>
Hangi:
- açık bir etikettir, bu etiketin adı tarafınızca belirlenir.
- kapalı bir etiket olduğundan, bu etiketin adı açık etiketin adıyla eşleşmelidir.
- içerik bu etiketin içeriğidir.
Her XML dosyasının üst kısmında, XML sürümünün kullanımda olduğunu belirten bir etiket bildirmeniz gerekir. Talimat etiketinin sözdizimi:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Gson nedir?
Gson (https://github.com/google/gson) kullanıcıların bir Java kütüphanesinden dönüştürme yapmasına olanak sağlayan bir kütüphanedir. Java nesneyi JSON dizesine dönüştürün ve ayrıca bir JSON dizesinden dönüştürün Java nesne. Gson keyfi olarak çalışabilir Java kaynak kodlarına sahip olmadan, mevcut nesneler de dahil olmak üzere nesneler.
1.6 sürümünden bu yana Gson iki yeni sınıf sunuyor: JsonReader ve JsonYazar JSON verileri üzerinde akış işleme sağlamak için.
- JsonYazar – JSON'a akış yazma. Genel uygulamaya yönelik sözdizimi aşağıdaki gibidir. Biz bir yaratıyoruz JsonYazar nesne. JSON dizesi oluşturmayı başlatmak ve bitirmek için işlevi kullanırız beginObject() ve endObject(). Bu iki fonksiyonu çalıştırmanın ortasında çiftlerle (anahtar => değer) veri yazmayı gerçekleştiriyoruz.
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
- JsonReader – JSON'dan okunan akış. Genel uygulama için sözdizimi aşağıdaki gibidir. Bir JsonReader nesnesi oluşturuyoruz. JSON dizesi oluşturmaya başlamak ve bitirmek için beginObject() ve endObject() işlevlerini kullanırız. Bu iki işlevi yürütmenin ortasında, verileri çiftlerle (anahtar => değer) okuma işlemini gerçekleştiriyoruz.
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şlemesi hızlıdır. Ancak JSON verilerinin işlenmesindeki her bir çifti (anahtar => değer) ele almanız 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 XML içeriğine nesneler veya bunun tersi. JAXB bir spesifikasyonla tanımlandığından bu standart için farklı uygulamalar kullanabiliriz.
JAXB ile genellikle şu temel açıklamaları kullanırız:
- @XmlRootElement: Bu açıklama, XML dosyasının en dış etiketinin ne olduğunu belirtir ve bu nedenle bir sınıfın üstünde bildirilir.
- @XmlElementWrapper: Bu ek açıklama, koleksiyonların etrafında bir sarmalayıcı XML öğesi oluşturur.
- @XmlElement: Nesnenin bir niteliğini bildirmek için kullanılan bu ek açıklama, XML dosyasının bir etiketidir.
- @XmlAttribute: Bu açıklama aynı zamanda nesnenin bir niteliğinin XML dosyasının etiketi olduğunu bildirmek için de kullanılır.
Genel uygulamaya yönelik sözdizimi aşağıdaki gibidir. İlk olarak, başlatacağız JAXBBağlam ile nesne Nesnem dönüştürülecek nesne.
JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);
Bu JAXBBağlam XML içeriğini bir nesneye dönüştüren bir nesne oluşturma yöntemine sahiptir. Java nesne, Düzenleyici.
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Bu JAXBBağlam nesneyi dönüştüren nesneyi yaratmanın bir yöntemi vardır. Java XML içeriğine itiraz Marshall.
Marshaller marshallerObj = jaxbContext.createMarshaller();
XML'i JSON'ye nasıl dönüştürebilirim?
XML – JSON dönüşümü örneğini platformda uyguluyoruz:
- JDK 8'i açın 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.

) 2 Adım Proje adını ayarlayın.
Proje adını ayarla: XmlToJsonÖrnek.
) 3 Adım Bir klasör oluşturun.
klasör oluşturun veri girişi iki dosya içeren örnek.xml ve örnek.json.
İlk önce XML'imizi şununla tanımlayalım: bölüm, rol ve kişi özellikleri.
Genel mimari şöyledir: ; .
<?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 JSON'u da aynı fikirle tanımlıyoruz:
{
"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 Nesneyi tanımlayın.
Pakette karşılık gelen nesne sınıflarını tanımlayın model.
- 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;
}
}
- Departman.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.
XML mesajını şuna dönüştür: Java JAXB kullanan nesneler
Öncelikle pakette sınıflandırılmış performansı tanımlıyoruz hizmet.
İlk sürecin ilk adımında JAXB'nin Un-marshalling tekniğini kullanıyoruz.
Sıralamayı kaldırma, bir istemci uygulamasına XML verilerini JAXB'den türetilenlere dönüştürme yeteneği sağlar Java nesneler.
Fonksiyonu tanımlıyoruz getObjectFromXmlFile XML dosyamızın sırasını kaldırmak için Java nesne. Bu fonksiyon sınıfta 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ıfta ç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();
Daha sonra bir sonraki adıma geçiyoruz.
dönüştürmek Java Gson kullanarak JSON mesajına itiraz ediyor
Bu adımda fonksiyonu tanımlıyoruz. WriteDataToJsonFile JSON dosyasına veri yazmak için. Bu fonksiyon sınıfta tanımlanmıştır JsonServisi.
JSON dizelerinin bir listesini yazmak için işlevi kullandığımızı unutmayın. beginArray() ve endArray(). Bu iki işlevin arasına her JSON dizesini 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ıfta çağırıyoruz XmlToJsonServisi.
JsonService jsonService = new JsonService(); jsonService.writeDataToJsonFile(filePathOut, roles, persons);
Bu ilk süreç.
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. Bu fonksiyon sınıfta tanımlanmıştır JsonServisi.
JSON dizelerinin bir listesini okumak için işlevi kullandığımızı unutmayın. beginArray() ve endArray(). Bu iki fonksiyon arasında her JSON stringini 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ıfta çağırıyoruz XmlToJsonServisi.
JsonService jsonService = new JsonService(); List<Role> roles = new ArrayList<>(); List<Person> persons = new ArrayList<>(); jsonService.getDataFromJsonFile(filePathIn, roles, persons);
Json'u XML'e Dönüştürme Java?
JSON'dan XML'ye in JAVA JSONObject json = new JSONObject(str); kullanılarak dönüştürülür. Sicim XML = XML. Geçerli bir dtd dosyanız veya xml dosyanız varsa, json'u xml'ye ve ayrıca xml'yi json'a dönüştürmek çok kolaydır.
Daha sonra bir sonraki adıma geçiyoruz.
dönüştürmek Java JAXB kullanarak XML mesajına nesneler
Bu adımda JAXB'nin Marshalling tekniğini kullanıyoruz.
Marshalling, bir istemci uygulamasına, türetilmiş bir JAXB'yi dönüştürme yeteneği sağlar. Java nesne ağacını XML verilerine dönüştürür.
Marshall'a parseObjectToXm fonksiyonunu tanımlıyoruz Java XML mesajına itiraz. Bu fonksiyon sınıfta tanımlanmıştır
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");
}
}
Yukarıdaki kodu sınıfta ç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 süreç.
Sonuç
Bu eğitimde, JAXB'nin XML verilerini okuyabilmesinin ve Gson'un bunu JSON'a yazabilmesinin bir yolunu kısaca öğrendik. Tam tersine Gson'un nasıl okuduğunu da gördük. JSON veri ve JAXB bunu XML'e yazar.

