{"id":1167,"date":"2021-04-26T14:30:02","date_gmt":"2021-04-26T13:30:02","guid":{"rendered":"http:\/\/www.igfasouza.com\/blog\/?p=1167"},"modified":"2021-04-26T14:32:19","modified_gmt":"2021-04-26T13:32:19","slug":"autonomous-json-database-with-java-records-and-json-libs-part2","status":"publish","type":"post","link":"http:\/\/www.igfasouza.com\/blog\/autonomous-json-database-with-java-records-and-json-libs-part2\/","title":{"rendered":"Autonomous JSON Database with Java Records and JSON libs &#8211; part2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd.jpg\" alt=\"\" width=\"797\" height=\"317\" class=\"alignnone size-full wp-image-1148\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd.jpg 797w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd-300x119.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd-768x305.jpg 768w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/p>\n<p><b>How\u2019s it going there?<\/b><\/p>\n<p>After I posted my blog about <a href=\"http:\/\/www.igfasouza.com\/blog\/autonomous-json-database-with-java-records-and-json-libs\/\" rel=\"noopener\" target=\"_blank\">Autonomous JSON Database ADJ and Json libs<\/a>, some people got to me asking and informing me that we can map directly to and from OSON (JSON type) without having to parser or serialize JSON text, and for that, we can use the &#8220;<em>createDocumentFrom<\/em>&#8221; method. So I decide to explore this as well.<\/p>\n<p>This is a kind of a continuation from my previous blog where I explored the &#8220;<em>createDocumentFromString<\/em>&#8221; method, and in this one, I\u2019ll explore the &#8220;<em>createDocumentFrom<\/em>&#8221; method.<\/p>\n<p>You can check the <a href=\"http:\/\/oracle.github.io\/soda-for-java\/\" rel=\"noopener\" target=\"_blank\">Java Doc<\/a>.<\/p>\n<p style=\"background-color: #bde5f8;color: #00529b;border: 1px solid;border-radius: 2px;margin: 10px 0px;padding: 15px 10px;\"><strong>Note<\/strong>: my intention here is not to show that one way is better than the other or to indicate one lib as better than the other. but to show the possible options. And as I already demonstrated the result will be the same.\n<\/p>\n<p>Oracle provides some <a href=\"https:\/\/github.com\/oracle\/json-in-db\/tree\/master\/SodaExamples\/src\/main\/java\/emp\" rel=\"noopener\" target=\"_blank\">examples<\/a>, but the idea here is to see how we can use ADJ with Java Records and see all Libs possibilities, and about the topic, I found this <a href=\"https:\/\/dev.to\/cchacin\/java-14-records-preview-37om\" rel=\"noopener\" target=\"_blank\">blog series<\/a> with a lot of explanations that I suggest you read before checking my examples.<\/p>\n<p>Again I did the test with the most popular JSON libs; JSON-B, Jackson, and Gson.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json.jpg\" alt=\"\" width=\"935\" height=\"418\" class=\"alignnone size-full wp-image-1153\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json.jpg 935w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json-300x135.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json-768x343.jpg 768w\" sizes=\"auto, (max-width: 935px) 100vw, 935px\" \/><br \/>\n<small>Picture1: most popular JSON libs<\/small><\/p>\n<p>You can check and get the code in my <a href=\"https:\/\/github.com\/igfasouza\/Oracle_AJD_java14\" rel=\"noopener\" target=\"_blank\">GitHub<\/a>.<\/p>\n<p>From the previous example, I just add a new Class Autonomous2 using the new method.<\/p>\n<p>First I updated the yasson version from 1.0.6 to 1.0.8 and with that, I got rid of some <a href=\"https:\/\/github.com\/quarkusio\/quarkus\/issues\/10803\" rel=\"noopener\" target=\"_blank\">WARNING<\/a><\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"sy0\">&lt;<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>groupId<span class=\"sy0\">&gt;<\/span>org.<span class=\"me1\">eclipse<\/span><span class=\"sy0\">&lt;\/<\/span>groupId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>artifactId<span class=\"sy0\">&gt;<\/span>yasson<span class=\"sy0\">&lt;\/<\/span>artifactId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>version<span class=\"sy0\">&gt;<\/span>1.0.8<span class=\"sy0\">&lt;\/<\/span>version<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>scope<span class=\"sy0\">&gt;<\/span>test<span class=\"sy0\">&lt;\/<\/span>scope<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;\/<\/span>dependency<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>For <b>JSON-B<\/b> I changed the attribute\u2019s names to add get in front.<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/><\/div><\/td><td><div class=\"java codecolorer\">&nbsp; &nbsp; @JsonProperty<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;post code&quot;<\/span><span class=\"br0\">&#41;<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> getPostCode,<br \/>\n&nbsp; &nbsp; @JsonProperty<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;country&quot;<\/span><span class=\"br0\">&#41;<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> getCountry,<br \/>\n&nbsp; &nbsp; @JsonProperty<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;country abbreviation&quot;<\/span><span class=\"br0\">&#41;<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> getCountryAbbreviation,<br \/>\n&nbsp; &nbsp; @JsonProperty<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;places&quot;<\/span><span class=\"br0\">&#41;<\/span> List<span class=\"sy0\">&lt;<\/span>Places<span class=\"sy0\">&gt;<\/span> getPlaces<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>For <b>Jackson<\/b>, I ended up with an ugly switch\/case method that I didn&#8217;t find a better way to populate the \u201cgen\u201d object.<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"kw1\">switch<\/span><span class=\"br0\">&#40;<\/span>token<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> START_OBJECT<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">writeStartObject<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> START_ARRAY<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">writeStartArray<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> END_ARRAY<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> END_OBJECT<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">writeEnd<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> FIELD_NAME<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">writeKey<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>com.<span class=\"me1\">fasterxml<\/span>.<span class=\"me1\">jackson<\/span>.<span class=\"me1\">core<\/span>.<span class=\"me1\">JsonParser<\/span><span class=\"br0\">&#41;<\/span> jacksonParser<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">currentName<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> VALUE_FALSE<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">false<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> VALUE_TRUE<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> VALUE_NULL<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">writeNull<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> VALUE_NUMBER_FLOAT<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> VALUE_NUMBER_INT<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>com.<span class=\"me1\">fasterxml<\/span>.<span class=\"me1\">jackson<\/span>.<span class=\"me1\">core<\/span>.<span class=\"me1\">JsonParser<\/span><span class=\"br0\">&#41;<\/span>jacksonParser<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getDecimalValue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">case<\/span> VALUE_STRING<span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; genJackson.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>com.<span class=\"me1\">fasterxml<\/span>.<span class=\"me1\">jackson<\/span>.<span class=\"me1\">core<\/span>.<span class=\"me1\">JsonParser<\/span><span class=\"br0\">&#41;<\/span>jacksonParser<span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getText<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">default<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">throw<\/span> <span class=\"kw1\">new<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+illegalstateexception\"><span class=\"kw3\">IllegalStateException<\/span><\/a><span class=\"br0\">&#40;<\/span>token.<span class=\"me1\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I checked out the new <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-13-2-final-released\/\" rel=\"noopener\" target=\"_blank\">Quarkus 1.13.2.Final released &#8211; Oracle JDBC driver extension<\/a>, bug fixes, and there\u2019s no SODA support.<\/p>\n<p>You can see everything about JDBC <a href=\"https:\/\/quarkus.io\/guides\/datasource\" rel=\"noopener\" target=\"_blank\">here<\/a> and an example with Oracle <a href=\"https:\/\/blogs.oracle.com\/developers\/configuring-the-oracle-jdbc-drivers-with-quarkus\" rel=\"noopener\" target=\"_blank\">here<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/duke_json02.jpg\" alt=\"\" width=\"534\" height=\"291\" class=\"alignnone size-full wp-image-1165\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/duke_json02.jpg 534w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/duke_json02-300x163.jpg 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><br \/>\n<small>Picture2: Java Duke serialization and deserialization<\/small><\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/ggkzN_OHPJs\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h2>Conclusion<\/h2>\n<ul>\n<li>\nAs I demonstrated, all options end up creating the same result.\n<\/li>\n<li>\nUse what is best for your case or whatever you feel more comfortable with.\n<\/li>\n<li>\nJava Records will likely need some JSON-B specification integration but that there is no technical blocker to make it work.\n<\/li>\n<li>\nI had fun and learned a lot about the differences between the JSON libs and how to combine them with Java Records\n<\/li>\n<\/ul>\n<p>Don&#8217;t forget that now the always Free Oracle Autonomous JSON Database is available, so now is the Action time. Go ahead and try to play around with AJD and check out the Java Records examples. <\/p>\n<h2>Links<\/h2>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/simple-oracle-document-access\/\" rel=\"noopener\" target=\"_blank\">https:\/\/docs.oracle.com\/en\/database\/oracle\/simple-oracle-document-access\/<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/oracle\/json-in-db\/tree\/master\/SodaExamples\/src\/main\/java\/emp\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/oracle\/json-in-db\/tree\/master\/SodaExamples\/src\/main\/java\/emp<\/a><\/p>\n<p><a href=\"http:\/\/oracle.github.io\/soda-for-java\/\" rel=\"noopener\" target=\"_blank\">http:\/\/oracle.github.io\/soda-for-java\/<\/a><\/p>\n<p><a href=\"https:\/\/rmannibucau.metawerx.net\/java-14-record-class-type-and-json-b.html\" rel=\"noopener\" target=\"_blank\">https:\/\/rmannibucau.metawerx.net\/java-14-record-class-type-and-json-b.html<\/a><\/p>\n<p><a href=\"https:\/\/dev.to\/cchacin\/java-14-records-with-jakartaee-json-b-160n\" rel=\"noopener\" target=\"_blank\">https:\/\/dev.to\/cchacin\/java-14-records-with-jakartaee-json-b-160n<\/a><\/p>\n<p><a href=\"https:\/\/go.oracle.com\/LP=105252?elqCampaignId=276940&#038;src1=:so:tw:or:dg:odv:::&#038;SC=:so:tw:or:dg:odv:::&#038;pcode=WWMK201107P00013\" rel=\"noopener\" target=\"_blank\">https:\/\/go.oracle.com\/LP=105252?elqCampaignId=276940&#038;src1=:so:tw:or:dg:odv:::&#038;SC=:so:tw:or:dg:odv:::&#038;pcode=WWMK201107P00013<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How\u2019s it going there? After I posted my blog about Autonomous JSON Database ADJ and Json libs, some people got to me asking and informing me that we can map directly to and from OSON (JSON type) without having to&hellip; <a href=\"http:\/\/www.igfasouza.com\/blog\/autonomous-json-database-with-java-records-and-json-libs-part2\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1165,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[26,17,27],"class_list":["post-1167","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-autonomous","tag-java","tag-json"],"_links":{"self":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/comments?post=1167"}],"version-history":[{"count":2,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1167\/revisions"}],"predecessor-version":[{"id":1170,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1167\/revisions\/1170"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media\/1165"}],"wp:attachment":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media?parent=1167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/categories?post=1167"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/tags?post=1167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}