{"id":38822,"date":"2023-12-05T09:04:28","date_gmt":"2023-12-05T08:04:28","guid":{"rendered":"https:\/\/www.happycoders.eu\/?p=38822"},"modified":"2025-06-12T09:03:54","modified_gmt":"2025-06-12T07:03:54","slug":"string-templates","status":"publish","type":"post","link":"https:\/\/www.happycoders.eu\/de\/java\/string-templates\/","title":{"rendered":"String Templates in Java"},"content":{"rendered":"\n<div class=\"wp-block-uagb-info-box uagb-block-af9d0506 uagb-infobox__content-wrap  uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-mobile uagb-infobox-image-valign-top hc-infobox\"><div class=\"uagb-ifb-icon-wrap\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z\"><\/path><\/svg><\/div><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><\/div><p class=\"uagb-ifb-desc\"><strong>Breaking News: <\/strong>Am 05.04.2024 hat Gavin Bierman <a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2024-April\/004106.html\" target=\"_blank\" rel=\"noopener\">bekanntgegeben, dass String Templates in der hier beschriebenen Form <em>nicht<\/em> ver\u00f6ffentlicht werden<\/a>. Es besteht Einigkeit dar\u00fcber, dass das Design ge\u00e4ndert werden soll, es besteht allerdings kein Konsens dar\u00fcber, <em>wie<\/em> es ge\u00e4ndert werden soll. Die Sprachentwickler wollen sich nun Zeit nehmen, das Design zu \u00fcberarbeiten. String Templates werden daher in <a href=\"\/de\/java\/java-23-features\/\">Java 23<\/a> nicht weiter enthalten sein, auch nicht mit <code>--enable-preview<\/code>.<\/p><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Artikel erf\u00e4hrst du:<\/p>\n\n\n\n<ul class=\"wp-block-list hc-checked-list\">\n<li>Wie vereinfachen String Templates die Zusammensetzung von Strings aus Text, Variablen und berechneten Werten?<\/li>\n\n\n\n<li>Was ist ein Template-Prozessor?<\/li>\n\n\n\n<li>Welche Template-Prozessoren gibt es?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">String Templates wurden in&nbsp;<a href=\"\/de\/java\/java-21-features\/#String_Templates_Preview_JEP_430\">Java 21<\/a>&nbsp;im Rahmen von&nbsp;<a href=\"https:\/\/openjdk.org\/projects\/amber\/\" target=\"_blank\" rel=\"noopener\">Project Amber<\/a>&nbsp;als Preview-Feature eingef\u00fchrt. In <a href=\"\/de\/java\/java-22-features\/#String_Templates_Second_Preview_JEP_459\">Java 22<\/a> wurden sie ohne \u00c4nderungen in eine zweite Preview-Runde geschickt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"status-quo-der-string-verkettung\">Status Quo der String-Verkettung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um Strings zur Laufzeit anhand von Variablen und berechneten Werten zusammenzusetzen, gibt es verschiedene M\u00f6glichkeiten. Die gel\u00e4ufigsten sind die folgenden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> a = ...;\n<span class=\"hljs-keyword\">int<\/span> b = ...;\n\nString concatenated = a + <span class=\"hljs-string\">\" times \"<\/span> + b + <span class=\"hljs-string\">\" = \"<\/span> + a * b;\nString format       = String.format(<span class=\"hljs-string\">\"%d times %d = %d\"<\/span>, a, b, a * b);\nString formatted    = <span class=\"hljs-string\">\"%d times %d = %d\"<\/span>.formatted(a, b, a * b);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Oft wird auch ein <code>StringBuilder<\/code>, weniger oft <code>java.text.MessageFormat<\/code> eingesetzt. Aber keine der verf\u00fcgbaren Varianten ist wirklich gut zu lesen. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"string-interpolation-mit-string-templates\">String-Interpolation mit String Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nahezu jede moderne Programmiersprache bietet die M\u00f6glichkeit der String-Interpolation, d. h. die M\u00f6glichkeit, Platzhalter in einem String auszuwerten und sie durch das Ergebnis dieser Auswertung zu ersetzen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Genau das (und noch mehr, s. u.) erm\u00f6glichen die durch <a rel=\"noopener\" href=\"https:\/\/openjdk.org\/jeps\/430\" target=\"_blank\">JDK Enhancement Proposal 430<\/a> eingef\u00fchrten \u201eString Templates\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Damit k\u00f6nnen wir das Beispiel von oben wie folgt umschreiben:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">int<\/span> a = ...;\n<span class=\"hljs-keyword\">int<\/span> b = ...;\n\nString interpolated = STR.<span class=\"hljs-string\">\"\\{a} times \\{b} = \\{a * b}\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Zur Laufzeit wird der Platzhalter <nobr><code>\\{a}<\/code><\/nobr>&nbsp;durch den Wert der Variablen&nbsp;<code>a<\/code>&nbsp;ersetzt und der Platzhalter <nobr><code>\\{b}<\/code><\/nobr>&nbsp;durch den Wert der Variablen&nbsp;<code>b<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die durch <code>\\{...}<\/code> gekennzeichneten Platzhalter d\u00fcrfen nicht nur Variablen und arithmetische Ausdr\u00fccke enthalten \u2013 sie k\u00f6nnen jeden beliebigen Java-Ausdruck enthalten, z. B. einen statischen Methodenaufruf:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String interpolated = STR.<span class=\"hljs-string\">\"\\{a} times \\{b} = \\{Math.multiplyExact(a, b)}\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Der Platzhalter darf auch Anf\u00fchrungszeichen enthalten, und der \u00dcbersicht halber kannst du ihn auf mehrere Zeilen aufteilen und mit Kommentaren versehen (an dieser Stelle muss ich allerdings das WordPress-Syntax-Highlighting-Plugin abschalten, da der folgende Code es \u00fcberfordern w\u00fcrde):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">String dateMessage = STR.\"Today's date: \\{\n        LocalDate.now().format(\n                  \/\/ We could also use DateTimeFormatter.ISO_DATE\n                  DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")\n        )}\";<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">String Templates k\u00f6nnen auch mit mehrzeiligen Strings verwendet werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Klartext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">int    httpStatus   = ...;\nString errorMessage = ...;\n\nString json = STR.\"\"\"\n    {\n      \"httpStatus\": \\{httpStatus},\n      \"errorMessage\": \"\\{errorMessage}\"\n    }\"\"\";<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Klartext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Falls du dich gefragt hast, was das <code>STR.<\/code> vor den Strings zu bedeuten hat \u2013 die Antwort findest du im n\u00e4chsten Abschnitt.<\/p>\n\n\n<div class=\"convertkit-form wp-block-convertkit-form\" style=\"\"><script async data-uid=\"1427197203\" src=\"https:\/\/happycoders.kit.com\/1427197203\/index.js\" data-jetpack-boost=\"ignore\" data-no-defer=\"1\" data-no-optimize=\"1\" nowprocket><\/script><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"string-template-processor\">String Template Processor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>STR<\/code> ist der Name eines sogenannten Template Processors (genauer gesagt: eine automatisch in jede Java-Datei importierte Konstante vom Typ <code>StringTemplate.Processor<\/code>). Ein Template Processor definiert, wie Template-Text und Platzhalter zu einem Ergebnis zusammengesetzt werden. Im Fall des <code>STR<\/code>-Template-Prozessors werden \u2013 wie oben beschrieben \u2013 die Java-Ausdr\u00fccke in den Platzhaltern aufgel\u00f6st und die Platzhalter durch die dabei herauskommenden Werte ersetzt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fmt-template-processor\">FMT Template Processor<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein weiterer Template Processor ist <code>FMT<\/code>. Dieser wertet den Platzhaltern vorangestellte Formatierungsangaben \u2013 wie wir sie auch von <code>String.format()<\/code> kennen \u2013 aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier noch einmal unser Multiplikationsbeispiel mit Flie\u00dfkommazahlen, die mit dem <code>FMT<\/code>-Template-Prozessor auf zwei Stellen nach dem Komma gerundet werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\"><span class=\"hljs-keyword\">double<\/span> a = ...;\n<span class=\"hljs-keyword\">double<\/span> b = ...;\n\nString interpolated = FMT.<span class=\"hljs-string\">\"%.2f\\{a} times %.2f\\{b} = %.2f\\{a * b}\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"sql-template-processor\">SQL Template Processor<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Template Processor muss \u00fcbrigens nicht zwangsl\u00e4ufig einen String zur\u00fcckliefern. So k\u00f6nnte z. B. ein Template Processor implementiert werden, der SQL-Kommandos zusammenstellt und ein SQL-Statement zur\u00fcckliefert \u2013 und ganz nebenbei noch vor Injektionsangriffen sch\u00fctzt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java\">String searchQuery = ...\nStatement statement = SQL.<span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"\n    SELECT * FROM User u\n    WHERE u.userName LIKE '%\\{searchQuery}%'\"<\/span><span class=\"hljs-string\">\"\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Wenn du noch tiefer in die Materie einsteigen willst, empfehle ich dir den <a href=\"https:\/\/openjdk.org\/jeps\/459\" target=\"_blank\" rel=\"noopener\">JDK Enhancement Proposal 459<\/a> zu lesen. Dort erf\u00e4hrst du auch, wie du deinen eigenen Template Processor schreiben kannst und dass ein Template Processor nicht immer einen String zur\u00fcckliefern muss. <\/p>\n<aside><p>Wenn dir der Artikel weitergeholfen hat, w\u00fcrde ich mich sehr \u00fcber eine positive Bewertung auf meinem <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">ProvenExpert-Profil<\/a> freuen. Dein Feedback hilft mir, meine Inhalte weiter zu verbessern und motiviert mich, neue informative Artikel zu schreiben.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"https:\/\/www.provenexpert.com\/de-de\/sven-woltmann-happycoders-eu\/7smk\/\" target=\"_blank\" rel=\"noopener\">Bewertung abgeben<\/a><\/p>\r\n                        <p>Du m\u00f6chtest \u00fcber alle neuen Java-Features auf dem Laufenden sein? Dann <a href=\"#\" data-formkit-toggle=\"d8ee997126\">klicke hier<\/a>, um dich f\u00fcr den HappyCoders-Newsletter anzumelden.<\/p>\r\n                        <p>\ud83d\udc49 <a href=\"#\" data-formkit-toggle=\"d8ee997126\">Newsletter-Anmeldung<\/a><\/p><\/aside>","protected":false},"excerpt":{"rendered":"<p>Erfahre, wie String Templates in Java die Zusammensetzung von Strings aus Text, Variablen und berechneten Werten vereinfachen.<\/p>\n","protected":false},"author":1,"featured_media":38824,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"Erfahre, wie String Templates in Java die Zusammensetzung von Strings aus Text, Variablen und berechneten Werten vereinfachen.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"string templates,string-templates","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_uag_custom_page_level_css":"","_wp_convertkit_post_meta":{"form":"-1","landing_page":"","tag":"0","restrict_content":"0"},"_metis_text_type":"standard","_metis_text_length":4963,"_post_count":0,"footnotes":""},"categories":[64],"tags":[179],"class_list":["post-38822","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java-amber-de"],"uagb_featured_image_src":{"full":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",1770,986,false],"thumbnail":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",150,84,false],"medium":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",300,167,false],"medium_large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",768,428,false],"large":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",1024,570,false],"feature_thumb_224":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-224x125.jpg",224,125,true],"feature_thumb_336":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-336x187.jpg",336,187,true],"feature_thumb_504":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-504x281.jpg",504,281,true],"feature_thumb_672":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-672x374.jpg",672,374,true],"half_400":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-400x223.jpg",400,223,true],"half_600":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-600x334.jpg",600,334,true],"full_800":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-800x446.jpg",800,446,true],"full_944":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-944x526.jpg",944,526,true],"full_1200":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-1200x668.jpg",1200,668,true],"wide_1180":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-1180x490.jpg",1180,490,true],"wide_1770":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java-1770x735.jpg",1770,735,true],"1536x1536":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",1536,856,false],"2048x2048":["https:\/\/www.happycoders.eu\/wp-content\/uploads\/2023\/12\/string-templates-java.jpg",1770,986,false]},"uagb_author_info":{"display_name":"Sven Woltmann","author_link":"https:\/\/www.happycoders.eu\/de\/author\/sven\/"},"uagb_comment_info":0,"uagb_excerpt":"Erfahre, wie String Templates in Java die Zusammensetzung von Strings aus Text, Variablen und berechneten Werten vereinfachen.","public_identification_id":"1c9add343fd54ee698418c665a737cd3","private_identification_id":"dea4e7579cbd469499db4fe65ad04bad","_links":{"self":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/38822","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/comments?post=38822"}],"version-history":[{"count":10,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/38822\/revisions"}],"predecessor-version":[{"id":52471,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/posts\/38822\/revisions\/52471"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media\/38824"}],"wp:attachment":[{"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/media?parent=38822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/categories?post=38822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.happycoders.eu\/de\/wp-json\/wp\/v2\/tags?post=38822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}