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