Formáty XML a JSON

Proč to potřebuji?

XML a JSON jsou nejrozšířenější formáty pro výměnu a ukládání strukturovaných dat. Znalost jejich zpracování v Javě je nezbytná pro práci s API, konfiguračními soubory a datovými formáty.

Teorie

XML: značkovací jazyk, stromová struktura. Parsery: DOM (celý strom v paměti), SAX (událostní, proudový, paměťově úsporný).

JSON: lehký formát klíč-hodnota. Knihovny: Gson (Google), Jackson. Mapování JSON ↔ Java objekty (POJO).

Příklady

// === JSON s knihovnou Gson ===
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Student {
    private String jmeno;
    private int vek;
    private List<String> predmety;

    // konstruktor, gettery, settery...
}

Gson gson = new Gson();

// Objekt → JSON (serializace)
Student s = new Student("Jan", 21, List.of("PRO1", "MAT"));
String json = gson.toJson(s);
// {"jmeno":"Jan","vek":21,"predmety":["PRO1","MAT"]}

// JSON → objekt (deserializace)
String jsonInput = "{\"jmeno\":\"Eva\",\"vek\":22,\"predmety\":[\"PRO1\"]}";
Student nacteny = gson.fromJson(jsonInput, Student.class);

// JSON → List
String jsonArray = "[{\"jmeno\":\"Jan\"},{\"jmeno\":\"Eva\"}]";
List<Student> seznam = gson.fromJson(jsonArray,
    new TypeToken<List<Student>>(){}.getType());

// === XML – DOM parser ===
import javax.xml.parsers.*;
import org.w3c.dom.*;

// XML soubor:
// <studenti>
//   <student vek="21">
//     <jmeno>Jan</jmeno>
//   </student>
// </studenti>

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("studenti.xml"));

// Procházení DOM stromu
NodeList studenti = doc.getElementsByTagName("student");
for (int i = 0; i < studenti.getLength(); i++) {
    Element el = (Element) studenti.item(i);
    String vek = el.getAttribute("vek");
    String jmeno = el.getElementsByTagName("jmeno")
                     .item(0).getTextContent();
    System.out.println(jmeno + " (" + vek + ")");
}

// === JSON čtení ze souboru ===
try (Reader reader = new FileReader("data.json")) {
    Student s2 = gson.fromJson(reader, Student.class);
}

// === XML zápis ===
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(doc), new StreamResult(new File("output.xml")));

Shrnutí

Klíčové body

  • DOM parser: celý strom v paměti, vhodný pro malé soubory
  • SAX parser: událostní, proudový, pro velké soubory
  • Gson/Jackson: automatické mapování JSON ↔ Java objekty
  • JSON je lehčí a populárnější pro API, XML pro konfiguraci a enterprise