Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

JSON naar XML converteren in Java met Gson & JAXB – Stapsgewijze handleiding

Wat is JSON?

JSON (JavaScript Object Notation) is een lichtgewicht, taal-onafhankelijk dataformaat dat sleutel-waardeparen gebruikt. Het wordt breed geaccepteerd voor gegevensuitwisseling en kan gemakkelijk in bestanden of databases worden opgeslagen.

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

Kenmerken:

  • Omgeven door accolades {}.
  • Sleutels en tekenreekswaarden staan tussen aanhalingstekens.
  • Paren worden gescheiden door komma's.
  • Sleutels gebruiken letters, cijfers, underscore; geen leidende cijfers of spaties.

Wat is XML?

XML (eXtensible Markup Language) is een W3C-standaard voor gestructureerde data. In tegenstelling tot HTML is XML puur een dataformaat—geen visuele weergave. Het staat aangepaste tags toe, wat het ideaal maakt voor cross-systeem data-uitwisseling.

Typische knoopstructuur:

<knoop>inhoud</knoop>

Bovenaan een XML-bestand moet de versie worden gedeclareerd:

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

Wat is Gson?

Gson is een Java-bibliotheek die Java-objecten serialiseert naar JSON en JSON deserialiseert terug naar Java-objecten. Sinds v1.6 ondersteunt het ook streaming via JsonReader en JsonWriter.

Voorbeeld van een streaming writer:

JsonWriter writer = new JsonWriter(new FileWriter(bestandPad)); writer.beginObject(); writer.name("sleutel").value("waarde"); writer.endObject(); writer.close();

Wat is JAXB?

JAXB (Java Architecture for XML Binding) koppelt Java-klassen aan XML met behulp van annotaties. Het ondersteunt marshalling (Java → XML) en unmarshalling (XML → Java).

Veelvoorkomende annotaties:

  • @XmlRootElement – definieert het root XML-element.
  • @XmlElementWrapper – verpakt collecties.
  • @XmlElement – koppelt een veld aan een XML-element.
  • @XmlAttribute – koppelt een veld aan een XML-attribuut.

Projectinstelling

  1. Maak een Java-project in je IDE (bijv. Eclipse).
  2. Noem het XmlToJsonExample.
  3. Voeg een data/input map toe met sample.xml en sample.json.
  4. Voeg Gson 2.8.5 toe aan de build path.
  5. Voeg de JAXB API toe (meestal inbegrepen bij Java 8).

Voorbeelddata

XML-weergave van een afdeling met rollen en personen:

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

Equivalente JSON-structuur:

{ "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"}]} ] }

Java-modelklassen

Definieer de volgende POJO's in het model pakket:

/* Role.java */ @XmlRootElement(name = "role") public class Role { private String id, position, salary; // getters, setters met @XmlAttribute/@XmlElement annotaties } /* Person.java */ @XmlRootElement(name = "person") public class Person { private String id, name, role; // getters, setters met @XmlAttribute/@XmlElement annotaties } /* Department.java */ @XmlRootElement(name = "department") public class Department { private List<Role> roles; private List<Person> persons; // getters/setters met @XmlElementWrapper/@XmlElement } /* XMLModel.java */ @XmlRootElement(name = "root") public class XMLModel { private Department department; // getter/setter met @XmlElement } 

XML unmarshallen naar Java-objecten (JAXB)

public XMLModel getObjectFromXmlFile(String path) throws JAXBException { File file = new File(path); JAXBContext ctx = JAXBContext.newInstance(XMLModel.class); Unmarshaller um = ctx.createUnmarshaller(); return (XMLModel) um.unmarshal(file); }

Java-objecten marshallen naar XML (JAXB)

public void parseObjectToXml(String path, XMLModel model) throws JAXBException, IOException { JAXBContext ctx = JAXBContext.newInstance(XMLModel.class); Marshaller m = ctx.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); m.marshal(model, new FileOutputStream(path)); }

Java-objecten serialiseren naar JSON (Gson)

public void writeDataToJsonFile(String path, List<Role> roles, List<Person> persons) throws IOException { JsonWriter writer = new JsonWriter(new FileWriter(path)); writer.setIndent(" "); writer.beginObject(); writer.name("roles").beginArray(); for (Role r : roles) { writer.beginObject(); writer.name("id").value(r.getId()); writer.name("position").value(r.getPosition()); writer.name("salary").value(r.getSalary()); writer.name("persons").beginArray(); for (Person p : persons) if (p.getRole().equals(r.getId())) { writer.beginObject(); writer.name("id").value(p.getId()); writer.name("name").value(p.getName()); writer.endObject(); } writer.endArray(); writer.endObject(); } writer.endArray(); writer.endObject(); writer.close(); }

JSON deserialiseren naar Java-objecten (Gson)

public void getDataFromJsonFile(String path, List<Role> roles, List<Person> persons) throws IOException { JsonReader reader = new JsonReader(new FileReader(path)); reader.beginObject(); while (reader.hasNext()) { String rootName = reader.nextName(); if ("roles".equals(rootName)) { reader.beginArray(); while (reader.hasNext()) { reader.beginObject(); Role r = new Role(); while (reader.hasNext()) { String key = reader.nextName(); switch (key) { case "id": r.setId(reader.nextString()); break; case "position": r.setPosition(reader.nextString()); break; case "salary": r.setSalary(reader.nextString()); break; case "persons": reader.beginArray(); while (reader.hasNext()) { reader.beginObject(); Person p = new Person(); p.setRole(r.getId()); while (reader.hasNext()) { String pKey = reader.nextName(); if ("id".equals(pKey)) p.setId(reader.nextString()); else if ("name".equals(pKey)) p.setName(reader.nextString()); } persons.add(p); reader.endObject(); } reader.endArray(); } } roles.add(r); reader.endObject(); } reader.endArray(); } } reader.endObject(); reader.close(); }

Volledige conversieworkflow

  1. Unmarshal sample.xml naar XMLModel met JAXB.
  2. Serialiseer de resulterende Java-objecten naar sample.json met Gson.
  3. Deserialiseer sample.json terug naar Java-objecten.
  4. Marshal die objecten naar een nieuw XML-bestand.

Conclusie

Deze handleiding demonstreert een schone, tweestaps conversiepijplijn: JAXB zorgt voor XML ↔ Java, terwijl Gson JSON ↔ Java aanpakt. Door deze bibliotheken te combineren, kunnen ontwikkelaars betrouwbaar data tussen formaten transformeren in Java-applicaties.

Java

  1. C++ Classes & Objects: Praktische Handleiding met Code‑Voorbeelden
  2. Java Hello World: Stap-voor-stap gids om je eerste Java-programma te schrijven
  3. Encapsulatie in Java: Uitgebreide gids met praktisch voorbeeld
  4. Java String length() Methode: Hoe de grootte van een String op te vragen (Voorbeeld)
  5. Java String.charAt() begrijpen: Syntaxis, Retourtype, Exceptions en Praktisch Voorbeeld
  6. Java String.contains() Methode: Controleren op Substrings – Praktische Voorbeelden
  7. Java String.endsWith() beheersen: Controleren op String-suffixen met voorbeelden
  8. Bestanden Lezen in Java met BufferedReader – Een Praktische Gids met Voorbeelden
  9. Fibonacci-reeks genereren in Java: For, While en Recursieve voorbeelden
  10. Insertion Sort algoritme in Java: Duidelijk voorbeeld & stapsgewijze handleiding
  11. Selection Sort in Java: Stapsgewijze voorbeeld & complete code