{"id":461,"date":"2024-06-22T16:03:01","date_gmt":"2024-06-22T15:03:01","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=461"},"modified":"2024-07-04T16:03:21","modified_gmt":"2024-07-04T15:03:21","slug":"parsen-von-yaml-in-java-mit-der-snakeyaml-library","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=461","title":{"rendered":"Parsen von YAML in Java mit der SnakeYAML-Library"},"content":{"rendered":"\n<p>YAML (YAML Ain&#8217;t Markup Language) ist ein weit verbreitetes Datenserialisierungsformat, das f\u00fcr seine Einfachheit und Lesbarkeit bekannt ist. Es wird h\u00e4ufig in Konfigurationsdateien und Datenaustauschformaten verwendet. In Java ist die SnakeYAML-Bibliothek eine der beliebtesten Optionen zum Parsen und Erstellen von YAML-Dateien. In diesem Artikel werden wir uns eingehend mit dem Parsen von YAML in Java mit SnakeYAML befassen, einschlie\u00dflich Installation, grundlegender Verwendung und fortgeschrittenerer Techniken.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Einf\u00fchrung in SnakeYAML<\/h2>\n\n\n\n<p>SnakeYAML ist eine Open-Source-Bibliothek, die von Andrey Somov entwickelt wurde und umfassende Unterst\u00fctzung f\u00fcr YAML 1.1 und 1.2 bietet. Die Bibliothek ist leistungsf\u00e4hig, flexibel und leicht zu verwenden, was sie zu einer ausgezeichneten Wahl f\u00fcr Java-Entwickler macht, die mit YAML arbeiten m\u00f6chten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Installation von SnakeYAML<\/h2>\n\n\n\n<p>Bevor wir mit dem Parsen von YAML-Daten beginnen k\u00f6nnen, m\u00fcssen wir die SnakeYAML-Bibliothek in unser Java-Projekt einbinden. Die einfachste M\u00f6glichkeit, dies zu tun, ist die Verwendung eines Build-Tools wie Maven oder Gradle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Maven<\/h3>\n\n\n\n<p>F\u00fcgen Sie die folgende Abh\u00e4ngigkeit zu Ihrer <code>pom.xml<\/code> hinzu:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.yaml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>snakeyaml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>1.30<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2.2 Gradle<\/h3>\n\n\n\n<p>F\u00fcgen Sie die folgende Abh\u00e4ngigkeit zu Ihrem <code>build.gradle<\/code> hinzu:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">implementation <span class=\"hljs-string\">'org.yaml:snakeyaml:1.30'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">3. Grundlagen des Parsens von YAML<\/h2>\n\n\n\n<p>Nachdem die Bibliothek installiert ist, k\u00f6nnen wir mit dem Parsen von YAML-Daten beginnen. Im einfachsten Fall m\u00f6chten wir eine YAML-Datei oder einen YAML-String in eine Java-Map oder ein anderes Java-Objekt umwandeln.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Parsen von YAML in eine Map<\/h3>\n\n\n\n<p>Hier ist ein einfaches Beispiel, das zeigt, wie man einen YAML-String in eine <code>Map&lt;String, Object&gt;<\/code> parsen kann:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.Yaml;\n<span class=\"hljs-keyword\">import<\/span> java.util.Map;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">YamlParserExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> yamlString = <span class=\"hljs-string\">\"name: John Doe\\nage: 30\\naddress:\\n  street: 123 Main St\\n  city: Anytown\"<\/span>;\n\n        Yaml yaml = <span class=\"hljs-keyword\">new<\/span> Yaml();\n        <span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">Object<\/span>&gt; data = yaml.load(yamlString);\n\n        System.out.println(data);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird der YAML-String erfolgreich in eine <code>Map&lt;String, Object&gt;<\/code> konvertiert, die die hierarchische Struktur der YAML-Daten beibeh\u00e4lt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Parsen von YAML aus einer Datei<\/h3>\n\n\n\n<p>Wenn Sie YAML-Daten aus einer Datei parsen m\u00f6chten, k\u00f6nnen Sie die Datei einfach in einen <code>InputStream<\/code> laden und die <code>Yaml<\/code>-Klasse verwenden, um die Daten zu parsen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.Yaml;\n\n<span class=\"hljs-keyword\">import<\/span> java.io.InputStream;\n<span class=\"hljs-keyword\">import<\/span> java.util.Map;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">YamlFileParserExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        Yaml yaml = <span class=\"hljs-keyword\">new<\/span> Yaml();\n\n        <span class=\"hljs-keyword\">try<\/span> (InputStream inputStream = YamlFileParserExample.class.getClassLoader().getResourceAsStream(<span class=\"hljs-string\">\"config.yaml\"<\/span>)) {\n            <span class=\"hljs-keyword\">if<\/span> (inputStream == <span class=\"hljs-literal\">null<\/span>) {\n                <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalArgumentException(<span class=\"hljs-string\">\"File not found!\"<\/span>);\n            }\n\n            <span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">Object<\/span>&gt; data = yaml.load(inputStream);\n            System.out.println(data);\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird eine Datei namens <code>config.yaml<\/code> aus dem Klassenpfad geladen und geparst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Erweiterte Verwendung von SnakeYAML<\/h2>\n\n\n\n<p>Neben dem Parsen in Maps kann SnakeYAML auch YAML-Daten direkt in benutzerdefinierte Java-Klassen umwandeln. Dies ist besonders n\u00fctzlich, wenn Sie stark typisierte Konfigurationsdaten ben\u00f6tigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 YAML in benutzerdefinierte Java-Objekte umwandeln<\/h3>\n\n\n\n<p>Nehmen wir an, wir haben die folgende YAML-Datei:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">person:\n  name: John Doe\n  age: 30\n  address:\n    street: 123 Main St\n    city: Anytown<\/code><\/span><\/pre>\n\n\n<p>Und die folgenden Java-Klassen, um diese Daten darzustellen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> int age;\n    <span class=\"hljs-keyword\">private<\/span> Address address;\n\n    <span class=\"hljs-comment\">\/\/ Getter und Setter<\/span>\n}\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Address<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String street;\n    <span class=\"hljs-keyword\">private<\/span> String city;\n\n    <span class=\"hljs-comment\">\/\/ Getter und Setter<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Wir k\u00f6nnen nun SnakeYAML verwenden, um die YAML-Daten direkt in eine Instanz der <code>Person<\/code>-Klasse zu laden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.Yaml;\n<span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.constructor.Constructor;\n\n<span class=\"hljs-keyword\">import<\/span> java.io.InputStream;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">YamlToJavaObjectExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        Yaml yaml = <span class=\"hljs-keyword\">new<\/span> Yaml(<span class=\"hljs-keyword\">new<\/span> Constructor(Person.class));\n\n        <span class=\"hljs-keyword\">try<\/span> (InputStream inputStream = YamlToJavaObjectExample.class.getClassLoader().getResourceAsStream(<span class=\"hljs-string\">\"person.yaml\"<\/span>)) {\n            <span class=\"hljs-keyword\">if<\/span> (inputStream == <span class=\"hljs-literal\">null<\/span>) {\n                <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IllegalArgumentException(<span class=\"hljs-string\">\"File not found!\"<\/span>);\n            }\n\n            Person person = yaml.load(inputStream);\n            System.out.println(person);\n        } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel verwenden wir einen benutzerdefinierten <code>Constructor<\/code>, um anzugeben, dass die Wurzel des YAML-Dokuments eine Instanz der <code>Person<\/code>-Klasse sein soll. SnakeYAML mappt die YAML-Daten automatisch auf die entsprechenden Felder der <code>Person<\/code>&#8211; und <code>Address<\/code>-Klassen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Konfigurieren von SnakeYAML<\/h2>\n\n\n\n<p>SnakeYAML bietet verschiedene Konfigurationsoptionen, um das Parsen und Erstellen von YAML-Daten anzupassen. Beispielsweise k\u00f6nnen Sie benutzerdefinierte Konstruktoren, Representer und Dumper konfigurieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Anpassen des Parsens mit Tags und Konstruktoren<\/h3>\n\n\n\n<p>Sie k\u00f6nnen benutzerdefinierte Tags und Konstruktoren verwenden, um spezielle Objekttypen zu verarbeiten. Hier ist ein Beispiel, das zeigt, wie man einen benutzerdefinierten Konstruktor f\u00fcr ein spezielles Tag definiert:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.Yaml;\n<span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.constructor.Constructor;\n<span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.nodes.Tag;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomConstructorExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        Constructor <span class=\"hljs-keyword\">constructor<\/span> = new Constructor();\n        <span class=\"hljs-keyword\">constructor<\/span>.addTypeDescription(new TypeDescription(CustomType.class, new Tag(\"!custom\")));\n\n        Yaml yaml = new Yaml(<span class=\"hljs-keyword\">constructor<\/span>);\n\n        String yamlString = \"!custom\\n  name: Custom Object\\n  value: 42\";\n        CustomType customObject = yaml.load(yamlString);\n\n        System.out.println(customObject);\n    }\n}\n\npublic class CustomType {\n    private <span class=\"hljs-built_in\">String<\/span> name;\n    private int value;\n\n    <span class=\"hljs-comment\">\/\/ Getter und Setter<\/span>\n\n    @Override\n    public <span class=\"hljs-built_in\">String<\/span> toString() {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"CustomType{name='\"<\/span> + name + <span class=\"hljs-string\">\"', value=\"<\/span> + value + <span class=\"hljs-string\">'}'<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel definieren wir einen benutzerdefinierten Typ <code>CustomType<\/code> und verwenden einen benutzerdefinierten Konstruktor, um Instanzen dieses Typs zu erstellen, wenn das <code>!custom<\/code>-Tag im YAML-Dokument gefunden wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Schreiben von YAML<\/h2>\n\n\n\n<p>Neben dem Parsen kann SnakeYAML auch verwendet werden, um Java-Objekte in YAML-Dokumente zu serialisieren. Hier ist ein einfaches Beispiel, das zeigt, wie man eine <code>Map<\/code> in einen YAML-String umwandelt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.DumperOptions;\n<span class=\"hljs-keyword\">import<\/span> org.yaml.snakeyaml.Yaml;\n\n<span class=\"hljs-keyword\">import<\/span> java.util.HashMap;\n<span class=\"hljs-keyword\">import<\/span> java.util.Map;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">YamlSerializationExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">Object<\/span>&gt; data = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\n        data.put(<span class=\"hljs-string\">\"name\"<\/span>, <span class=\"hljs-string\">\"John Doe\"<\/span>);\n        data.put(<span class=\"hljs-string\">\"age\"<\/span>, <span class=\"hljs-number\">30<\/span>);\n\n        <span class=\"hljs-built_in\">Map<\/span>&lt;<span class=\"hljs-built_in\">String<\/span>, <span class=\"hljs-built_in\">String<\/span>&gt; address = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\n        address.put(<span class=\"hljs-string\">\"street\"<\/span>, <span class=\"hljs-string\">\"123 Main St\"<\/span>);\n        address.put(<span class=\"hljs-string\">\"city\"<\/span>, <span class=\"hljs-string\">\"Anytown\"<\/span>);\n        data.put(<span class=\"hljs-string\">\"address\"<\/span>, address);\n\n        DumperOptions options = <span class=\"hljs-keyword\">new<\/span> DumperOptions();\n        options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);\n\n        Yaml yaml = <span class=\"hljs-keyword\">new<\/span> Yaml(options);\n        <span class=\"hljs-built_in\">String<\/span> yamlString = yaml.dump(data);\n\n        System.out.println(yamlString);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel erstellen wir eine <code>Map<\/code> und serialisieren sie in einen YAML-String. Die <code>DumperOptions<\/code>-Klasse wird verwendet, um die Ausgabeformatierung zu konfigurieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>SnakeYAML ist eine m\u00e4chtige und flexible Bibliothek f\u00fcr das Arbeiten mit YAML in Java. Sie bietet umfassende Funktionen zum Parsen und Erstellen von YAML-Dokumenten und l\u00e4sst sich leicht in verschiedene Java-Anwendungen integrieren. In diesem Artikel haben wir die grundlegenden und erweiterten Verwendungsm\u00f6glichkeiten von SnakeYAML behandelt, einschlie\u00dflich der Konfiguration und Anpassung der Bibliothek. Mit diesem Wissen sind Sie gut ger\u00fcstet, um YAML-Daten in Ihren Java-Projekten effektiv zu verwenden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>YAML (YAML Ain&#8217;t Markup Language) ist ein weit verbreitetes Datenserialisierungsformat, das f\u00fcr seine Einfachheit und Lesbarkeit bekannt ist. Es wird h\u00e4ufig in Konfigurationsdateien und Datenaustauschformaten verwendet. In Java ist die SnakeYAML-Bibliothek eine der beliebtesten Optionen zum Parsen und Erstellen von YAML-Dateien. In diesem Artikel werden wir uns eingehend mit dem Parsen von YAML in Java [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-461","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=461"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/461\/revisions"}],"predecessor-version":[{"id":462,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/461\/revisions\/462"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}