Μετατροπή JSON σε XML Java χρησιμοποιώντας Gson και JAXB
⚡ Έξυπνη Σύνοψη
Μετατροπή JSON σε XML Java χρησιμοποιώντας Gson και JAXB μέσω χάρτηping και οι δύο μορφές στην ίδια σχολιασμένη Java κλάσεις. Αυτό το άρθρο ορίζει κάθε μορφή, ρυθμίζει το έργο, αποσυναρμολογεί την XML με JAXB, γράφει JSON με Gson και αντιστρέφει ολόκληρη τη διαδικασία.
Τι είναι το JSON;
Το JSON είναι μια συντομογραφία του JavaΗ σημειογραφία αντικειμένων Script, η οποία είναι μια μορφή δεδομένων που ακολουθεί κανόνες που μπορούν να διαβάσουν οι περισσότερες γλώσσες προγραμματισμού. Μπορούμε εύκολα να την αποθηκεύσουμε σε ένα αρχείο ή σε μια βάση δεδομένων. Η μορφή JSON χρησιμοποιεί ζεύγη κλειδιού-τιμής για την περιγραφή δεδομένων.
Στο ακόλουθο παράδειγμα, ορίζουμε μια συμβολοσειρά JSON που αποθηκεύει προσωπικές πληροφορίες:
{
"username" : "guru99user",
"email" : "guru99user@mail.com"
}
Έτσι, η σύνταξη του JSON είναι πολύ απλή. Κάθε στοιχείο δεδομένων έχει δύο μέρη, ένα κλειδί και μια τιμή, τα οποία αντιστοιχούν στο όνομα του πεδίου και την τιμή του σε μια εγγραφή. Εξετάζοντας περαιτέρω, υπάρχουν μερικοί κανόνες όπως αυτός:
- Η συμβολοσειρά JSON περικλείεται από σγουρά άγκιστρα {}.
- Τα κλειδιά του JSON πρέπει να περικλείονται σε διπλά εισαγωγικά και οι τιμές συμβολοσειρών πρέπει επίσης να περιέχονται σε εισαγωγικά.
- Εάν υπάρχουν περισσότερα δεδομένα (περισσότερα ζεύγη κλειδιών => τιμών), χρησιμοποιούμε κόμματα (,) για να τα διαχωρίσουμε.
- Τα κλειδιά JSON θα πρέπει να χρησιμοποιούν απλά γράμματα, αριθμούς ή τον χαρακτήρα υπογράμμισης, χωρίς κενά, και ο πρώτος χαρακτήρας δεν πρέπει να είναι αριθμός.
Τι είναι το XML;
Το XML αντιπροσωπεύει την eXtensible Markup Language, η οποία προτάθηκε από την Κοινοπραξία του Παγκοσμίου Ιστού (WWW).https://www.w3.org/) για τη δημιουργία άλλων γλωσσών σήμανσης. Πρόκειται για ένα απλό υποσύνολο που μπορεί να περιγράψει πολλούς διαφορετικούς τύπους δεδομένων, επομένως είναι πολύ χρήσιμο για την κοινή χρήση δεδομένων μεταξύ συστημάτων.
Οι ετικέτες στο XML συχνά δεν είναι προκαθορισμένες, αλλά δημιουργούνται σύμφωνα με τις συμβάσεις του χρήστη. XML εισάγει νέες δυνατότητες βασισμένες στα πλεονεκτήματα της HTML.
Υπάρχουν ορισμένα χρήσιμα χαρακτηριστικά XML για ποικίλα συστήματα και λύσεις:
- Η XML είναι επεκτάσιμη: Η XML σάς επιτρέπει να δημιουργήσετε τις δικές σας προσαρμοσμένες ετικέτες που ταιριάζουν στην εφαρμογή σας.
- Η XML μεταφέρει δεδομένα, δεν τα εμφανίζει: Η XML σάς επιτρέπει να αποθηκεύετε δεδομένα ανεξάρτητα από τον τρόπο εμφάνισής τους.
- Η XML είναι ένα κοινό πρότυπο: Η XML αναπτύχθηκε από την Κοινοπραξία του Παγκόσμιου Ιστού (W3C) και είναι διαθέσιμη ως ανοιχτό πρότυπο.
Η XML βασίζεται σε μια δομή ένθετων κόμβων. Κάθε κόμβος έχει μια ετικέτα ανοίγματος και μια ετικέτα κλεισίματος ως εξής:
<node>content</node>
Στο οποίο:
- είναι μια ανοιχτή ετικέτα και το όνομα αυτής της ετικέτας ορίζεται από εσάς.
- είναι μια ετικέτα κλεισίματος και το όνομα αυτής της ετικέτας πρέπει να ταιριάζει με το όνομα της ετικέτας ανοίγματος.
- περιεχόμενο είναι το περιεχόμενο αυτής της ετικέτας.
Στην κορυφή κάθε αρχείου XML πρέπει να δηλώσετε μια ετικέτα που να υποδεικνύει την έκδοση XML που χρησιμοποιείται. Η σύνταξη της ετικέτας εντολής:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
JSON vs XML: Βασικές διαφορές
Και οι δύο μορφές φέρουν δομημένα δεδομένα και ο παρακάτω πίνακας δείχνει γιατί ένα έργο μπορεί να χρειαστεί να μετακινηθεί μεταξύ τους.
| Παράμετρος | JSON | XML |
|---|---|---|
| Στυλ σύνταξης | Ζεύγη κλειδιών και τιμών | Ενσωματωμένες ετικέτες |
| Τύποι δεδομένων | Σειρά χαρακτήρων, αριθμός, λογικό, null, πίνακας, αντικείμενο | Μόνο κείμενο, οι τύποι προέρχονται από ένα σχήμα |
| Γνωρίσματα | Δεν υποστηρίζεται | Υποστηρίζεται σε οποιοδήποτε στοιχείο |
| Σχόλια | Δεν υποστηρίζεται | υποστηριζόνται! |
| Πολυλογία | Кόμπακτ | Πιο λεπτομερές επειδή οι ετικέτες επαναλαμβάνονται |
| Επικύρωση σχήματος | Σχήμα JSON, προαιρετικό | DTD και XSD, ώριμα |
| Τυπική χρήση | API ιστού και διαμόρφωση | Μηνύματα και έγγραφα επιχειρήσεων |
Τι είναι ο Gson;
Γκσον (https://github.com/google/gson) Είναι ένα Java βιβλιοθήκη που επιτρέπει στους χρήστες να μετατρέψουν ένα Java αντικείμενο σε μια συμβολοσειρά JSON, καθώς και για να μετατρέψετε μια συμβολοσειρά JSON ξανά σε Java αντικείμενο. Ο Gson μπορεί να εργαστεί με αυθαίρετα Java αντικείμενα, συμπεριλαμβανομένων υπαρχόντων αντικειμένων των οποίων τον πηγαίο κώδικα δεν έχετε.
Από την έκδοση 1.6, η Gson εισάγει δύο κλάσεις, JsonReader και JsonWriter, για την παροχή επεξεργασίας ροής δεδομένων JSON.
- JsonWriter – Ροή εγγραφής σε JSON. Δημιουργούμε ένα JsonWriter αντικείμενο. Για να ξεκινήσουμε και να ολοκληρώσουμε τη δημιουργία ενός αντικειμένου JSON, χρησιμοποιούμε τις συναρτήσεις startObject() και endObject()Μεταξύ αυτών των δύο κλήσεων, γράφουμε δεδομένα ως ζεύγη (κλειδί => τιμή).
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 Architecture για XML Binding, η οποία είναι μια βιβλιοθήκη που χρησιμοποιεί σχολιασμούς για τη μετατροπή Java αντικείμενα σε περιεχόμενο XML και αντίστροφα. Καθώς το JAXB ορίζεται από μια προδιαγραφή, μπορούμε να χρησιμοποιήσουμε διαφορετικές υλοποιήσεις αυτού του προτύπου.
Με το JAXB, χρησιμοποιούμε συχνά τις ακόλουθες βασικές σχολιασμούς:
- @XmlRootElementΑυτή η σχολίαση καθορίζει την εξώτατη ετικέτα του αρχείου XML και επομένως δηλώνεται πάνω από μια κλάση.
- @XmlElementWrapper: Αυτός ο σχολιασμός δημιουργεί ένα στοιχείο XML περιτυλίγματος γύρω από τις συλλογές.
- @XmlElementΑυτή η σχολίαση δηλώνει ότι μια ιδιότητα του αντικειμένου γίνεται θυγατρική ετικέτα του αρχείου XML.
- @XmlAttributeΑυτή η σχολίαση δηλώνει ότι μια ιδιότητα του αντικειμένου γίνεται χαρακτηριστικό στην περιβάλλουσα ετικέτα.
Η γενική υλοποίηση έχει ως εξής. Αρχικά, αρχικοποιούμε το JAXBCcontext αντικείμενο με το MyObject κλάση προς μετατροπή.
JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);
Αυτός ο διαλογισμός στα JAXBCcontext Το αντικείμενο έχει μια μέθοδο που δημιουργεί ένα αντικείμενο που μετατρέπει το περιεχόμενο XML σε ένα Java αντικείμενο, το Unmarshaller.
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Το ίδιο JAXBCcontext Το αντικείμενο έχει επίσης μια μέθοδο που δημιουργεί το αντικείμενο το οποίο μετατρέπει ένα Java αντικείμενο σε περιεχόμενο XML, το Μάρσαλερ.
Marshaller marshallerObj = jaxbContext.createMarshaller();
⚠️ Προειδοποίηση: Το JAXB αφαιρέθηκε από το JDK το Java 11. Επί Java 11 και νεότερες εκδόσεις, προσθέστε ρητά το API και μια υλοποίηση χρόνου εκτέλεσης στο έργο, για παράδειγμα jakarta.xml.bind:jakarta.xml.bind-api Μαζί με org.glassfish.jaxb:jaxb-runtimeκαι εισαγάγετε τις σημειώσεις από jakarta.xml.bind.annotation αντί του javax.xml.bind.annotation.
Πώς να μετατρέψετε XML σε JSON;
Υλοποιούμε το παράδειγμα μετατροπής από XML σε JSON στην ακόλουθη πλατφόρμα. Οι παρακάτω εκδόσεις είναι αυτές που χρησιμοποιούνται για τα στιγμιότυπα οθόνης. Νεότερες εκδόσεις του JDK, Eclipseκαι ο Gson λειτουργούν με τον ίδιο τρόπο, με την επιφύλαξη της παραπάνω σημείωσης JAXB.
- OpenJDK 8 για Ubuntu 18.04 x64.
- Eclipse IDE 2019-03 (4.11.0) x64 Java Ανάπτυξη για Ubuntu.
- Gson 2.8.5.
Βήμα 1) Δημιουργία έργου.
Δημιουργήστε ένα νέο Java του έργου.
Βήμα 2) Ορίστε όνομα έργου.
Ορίστε το όνομα του έργου σε Παράδειγμα XmlToJson.
Βήμα 3) Δημιουργήστε ένα φάκελο.
Δημιουργήστε τον φάκελο εισαγωγή δεδομένων που περιέχει τα δύο αρχεία δείγμα.xml και δείγμα.json.
Ας ορίσουμε πρώτα την XML μας με τμήμα, ρόλοςκαι person ιδιότητες.
Η γενική αρχιτεκτονική είναι η εξής: ένα τμήμα έχει πολλούς ρόλους και ένας ρόλος έχει πολλά άτομα. Το παρακάτω διάγραμμα δείχνει αυτές τις σχέσεις.
<?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) Ορίστε αντικείμενα.
Ορίστε τις αντίστοιχες κλάσεις αντικειμένων στο πακέτο μοντέλο.
Ρόλος.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 Κατασκευή μονοπατιού.
Εάν το έργο χρησιμοποιεί Maven Αντί για ένα jar που προστίθεται χειροκίνητα, οι ίδιες βιβλιοθήκες δηλώνονται ως εξαρτήσεις. Η έκδοση 2.8.5 είναι καρφιτσωμένη εδώ για να ταιριάζει με τα στιγμιότυπα οθόνης και οποιαδήποτε μεταγενέστερη έκδοση του Gson λειτουργεί με τον ίδιο τρόπο για αυτό το παράδειγμα:
<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 σε Java αντικείμενα που χρησιμοποιούν JAXB
Αρχικά, ορίζουμε τις κλάσεις που εκτελούνται στο πακέτο υπηρεσία.
Στο πρώτο βήμα της πρώτης διαδικασίας, χρησιμοποιούμε την τεχνική un-marshalling του 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();
Σε αυτό το σημείο, το αρχείο XML έχει γίνει τρία Java αντικείμενα στη μνήμη. Το επόμενο βήμα τα γράφει ως JSON.
Μετατρέπω Java αντικειμένων στο μήνυμα JSON χρησιμοποιώντας το Gson
Σε αυτό το βήμα, ορίζουμε τη συνάρτηση 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);
Αυτή είναι η πρώτη διαδικασία. Ο εσωτερικός βρόχος αντιστοιχίζει κάθε άτομο με το τρέχον αναγνωριστικό ρόλου, και έτσι η επίπεδη λίστα ατόμων XML μετατρέπεται σε έναν ένθετο πίνακα JSON.
Μετατροπή μηνύματος JSON σε Java αντικείμενα που χρησιμοποιούν το Gson
Στο πρώτο βήμα της δεύτερης διαδικασίας, ορίζουμε τη συνάρτηση 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);
Μετατρέπω Java αντικείμενα σε μήνυμα XML χρησιμοποιώντας JAXB
Σε αυτό το βήμα, χρησιμοποιούμε την τεχνική παράταξης του JAXB.
Το Marshalling παρέχει σε μια εφαρμογή-πελάτη τη δυνατότητα μετατροπής ενός παραγόμενου από JAXB Java δέντρο αντικειμένων σε δεδομένα XML.
Ορίζουμε τη συνάρτηση parseObjectToXml να παρατάξει το 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);
Αυτή είναι η δεύτερη διεργασία. Το αρχείο που δημιουργήθηκε ταιριάζει με το αρχικό sample.xml, το οποίο επιβεβαιώνει ότι η διαδρομή μετ' επιστροφής διατήρησε κάθε τιμή.
Πώς να μετατρέψετε το JSON σε XML σε Java χωρίς Πρότυπη Τάξη;
Η παραπάνω προσέγγιση είναι η σωστή επιλογή όταν η δομή είναι γνωστή και σταθερή, επειδή οι σχολιασμένες κλάσεις τεκμηριώνουν τη συνάρτηση.tracτ. Όταν η δομή είναι άγνωστη ή αλλάζει συχνά, ένας γενικός μετατροπέας είναι ταχύτερος.
The org.json Η βιβλιοθήκη εκτελεί τη μετατροπή σε δύο γραμμές, χωρίς καμία κλάση μοντέλου:
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); } }
Παραγωγή:
<username>guru99user</username><email>guru99user@mail.com</email>
Σημειώστε ότι η γενική διαδρομή δεν παράγει κανένα στοιχείο ρίζας και κανένα χαρακτηριστικό, επομένως XML.toString(json, "root") συνήθως απαιτείται. Ο παρακάτω πίνακας παρουσιάζει τις δύο προσεγγίσεις παράλληλα.
| Κριτήριο | Gson με JAXB | org.json γενική μετατροπή |
|---|---|---|
| Απαιτούνται μαθήματα μοντέλων | Ναι | Οχι |
| Έλεγχος της δομής | Πλήρες, συμπεριλαμβανομένων των χαρακτηριστικών | Περιορισμένο, μόνο στοιχεία |
| Ρέσαping ημερομηνία | Πιθανό, όπως φαίνεται με τα ένθετα άτομα | Αδύνατον |
| Γραμμές κώδικα | Πολλές | Δύο |
| καλυτερα for | Σταθερά, τεκμηριωμένα σχήματα | Ad hoc ή άγνωστες δομές |
Το JAXB διαβάζει δεδομένα XML και το Gson τα γράφει σε JSON, και η αντίστροφη διαδρομή χρησιμοποιεί το Gson για να διαβάσει JSON δεδομένα ενώ το JAXB τα γράφει πίσω σε XML. Για να προχωρήσετε περαιτέρω, ανατρέξτε XML θεμελιώδεις αρχές, το ευρύτερο Java φροντιστήριοκαι JasperReports, το οποίο καταναλώνει και τις δύο μορφές ως πηγές δεδομένων αναφοράς.









