{"id":4365,"date":"2018-11-13T09:00:10","date_gmt":"2018-11-13T08:00:10","guid":{"rendered":"https:\/\/www.opengis.ch\/?p=4365"},"modified":"2020-05-27T18:33:51","modified_gmt":"2020-05-27T16:33:51","slug":"visualize-postgres-json-data-in-qml-widgets","status":"publish","type":"post","link":"https:\/\/www.opengis.ch\/de\/2018\/11\/13\/visualize-postgres-json-data-in-qml-widgets\/","title":{"rendered":"Visualize Postgres JSON data in QML widgets"},"content":{"rendered":"<p><em><strong>As promised some time ago in&nbsp;&#8222;<a class=\"row-title\" href=\"https:\/\/www.opengis.ch\/2018\/11\/06\/qml-widgets-qgis\/\" aria-label=\"\u201cThe new QML widgets in QGIS \u2013 When widgets get unbridled\u201d (Edit)\">The new QML widgets in QGIS \u2013 When widgets get unbridled<\/a>&#8220; we still owe you some fancy unicorns, but first let&#8217;s have a look at another nice feature that has been introduced in QGIS 3.4 LTR,&nbsp; the reading of <a href=\"https:\/\/www.postgresql.org\/docs\/11\/static\/datatype-json.html\">PostgreSQL JSON and JSONB types<\/a>.<\/strong><\/em><br \/>\nWith JSON you have a lot of possibilities for storing unstructured data. In our case, it&#8217;s mainly interesting when the data are stored as an array or a JSON object. Let&#8217;s have a look at two examples.<\/p>\n<h1>Visualize Postgres JSON data with common widgets<\/h1>\n<p>With the usual QGIS widgets &#8222;List&#8220; and &#8222;Key\/Value&#8220; you are able to display JSON arrays and simple JSON objects.<\/p>\n<h2>JSON array as List<\/h2>\n<pre class=\"lang:default decode:true\">[\n    \"European dark bee\",\n    \"Carniolan honey bee\",\n    \"Buckfast bee\"\n]<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_list.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4332\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_list.png?resize=750%2C155&#038;ssl=1\" alt=\"\" width=\"750\" height=\"155\"><\/a><\/p>\n<h2>Simple JSON object as Key\/Value<\/h2>\n<pre class=\"lang:default decode:true\">{\n    \"nomenclatura\":\"Apis mellifera mellifera\",\n    \"name\":\"European dark bee\",\n    \"link\":\"https:\/\/en.wikipedia.org\/wiki\/European_dark_bee\"\n}<\/pre>\n<h3><a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_keyvalue.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4333\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_keyvalue.png?resize=750%2C155&#038;ssl=1\" alt=\"\" width=\"750\" height=\"155\"><\/a><\/h3>\n<p>Or of course both as plain text in the &#8222;Text Edit&#8220; widget:<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_textedit.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4334\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_textedit.png?resize=750%2C305&#038;ssl=1\" alt=\"\" width=\"750\" height=\"305\"><\/a><\/p>\n<h1>Say hi to Postgres JSON in QML widget<\/h1>\n<p>Probably, your JSON data does not look really nice with the aforementioned widgets, luckily since QGIS 3.4, you are free to create your own QML widget. Since QGIS already loads the JSON data into structures that are supported by QML, we can use all the JSON data within the QML code.<br \/>\nLet&#8217;s assume you have the JSON array from above and you like the elegance of the blue of Jacques Majorelle. You create your personal list widget by adding the JSON field as an expression:<\/p>\n<pre class=\"lang:default decode:true\">import QtQuick 2.0\nRectangle {\n    width: 310; height: 250; color: \"grey\"\n    Column {\n        anchors.horizontalCenter: parent.horizontalCenter\n        anchors.verticalCenter: parent.verticalCenter\n        spacing: 5\n        Repeater {\n            model:expression.evaluate(\"\\\"jvalue\\\"\")\n            Rectangle {\n                color: \"#6050dc\"\n                width: 300; height: 50; radius: 10.0\n                Text {\n                    anchors.centerIn: parent\n                    font.pointSize: 24\n                    text: modelData\n                }\n            }\n        }\n    }\n}<\/pre>\n<p>You will have your very personal list:<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qmllist-1.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4355\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qmllist-1.png?resize=310%2C265&#038;ssl=1\" alt=\"\" width=\"310\" height=\"265\"><\/a><br \/>\nJSON also allows storing more complex data, like for example a list of objects. In that case, you will reach the limits of the common QGIS widgets.<br \/>\nLet&#8217;s assume you have a table looking like this:<\/p>\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<th>nomenclatura<\/th>\n<th>name<\/th>\n<th>link<\/th>\n<\/tr>\n<tr>\n<td>Apis mellifera mellifera<\/td>\n<td>European dark bee<\/td>\n<td>https:\/\/en.wikipedia.org\/wiki\/European_dark_bee<\/td>\n<\/tr>\n<tr>\n<td>Apis mellifera carnica<\/td>\n<td>Carniolan honey bee<\/td>\n<td>https:\/\/en.wikipedia.org\/wiki\/Carniolan_honey_bee<\/td>\n<\/tr>\n<tr>\n<td>Apis mellifera<\/td>\n<td>Buckfast bee<\/td>\n<td>https:\/\/en.wikipedia.org\/wiki\/Buckfast_bee<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In JSON it would be stored like this:<\/p>\n<pre class=\"lang:default decode:true\">[\n    {\"nomenclatura\":\"Apis mellifera mellifera\",\"name\":\"European dark bee\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/European_dark_bee\"},\n    {\"nomenclatura\":\"Apis mellifera carnica\",\"name\":\"Carniolan honey bee\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Carniolan_honey_bee\"},\n    {\"nomenclatura\":\"Apis mellifera\",\"name\":\"Buckfast bee\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Buckfast_bee\"}\n]<\/pre>\n<p>With the QML Widget you can use the QML TableView to visualize:<\/p>\n<pre class=\"lang:default decode:true\">import QtQuick 2.0\nimport QtQuick.Controls 1.4\nTableView {\n    width: 600\n    model: expression.evaluate(\"\\\"jvalue\\\"\")\n    TableViewColumn {\n        role: \"nomenclatura\"\n        title: \"Nomenclature\"\n        width: 200\n    }\n    TableViewColumn {\n        role: \"name\"\n        title: \"Name\"\n        width: 200\n    }\n    TableViewColumn {\n        role: \"link\"\n        title: \"Wikipedia\"\n        width: 200\n    }\n}<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_tableview.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4336\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_tableview.png?resize=615%2C196&#038;ssl=1\" alt=\"\" width=\"615\" height=\"196\"><\/a><br \/>\nOr, even more powerful, you can create your super individual table using the model and create each row by using a QML <a href=\"https:\/\/doc.qt.io\/qt-5\/qml-qtquick-repeater.html\">Repeater<\/a>.<br \/>\nAdditionally, you can use a lot of fancy stuff like:<\/p>\n<ul>\n<li>mouse interaction<\/li>\n<li>animation<\/li>\n<li>opening an external link<\/li>\n<li>&#8230; and so on<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_table.gif?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4337\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_table.gif?resize=704%2C320&#038;ssl=1\" alt=\"\" width=\"704\" height=\"320\"><\/a><br \/>\nThe QML code for that looks like this.<\/p>\n<pre class=\"lang:default decode:true \">import QtQuick 2.0\nRectangle {\n    width: 610; height: 500\n    Column {\n        anchors.horizontalCenter: parent.horizontalCenter\n        anchors.verticalCenter: parent.verticalCenter\n        Repeater {\n            model: expression.evaluate(\"\\\"jvalue\\\"\")\n            Row {\n                id: theRow\n                height: mouseArea1.containsMouse || mouseArea2.containsMouse || mouseArea3.containsMouse ? 70 : 50;\n                Rectangle { color: \"lightblue\";\n                            border.width: 1\n                            width: 150; height: parent.height\n                            Text { anchors.centerIn: parent\n                                   font.pointSize: 10; text: modelData.nomenclatura }\n                            MouseArea {\n                                id: mouseArea1\n                                anchors.fill: parent\n                                hoverEnabled: true\n                            }\n                }\n                Rectangle { color: \"lightgreen\";\n                            border.width: 1\n                            width: 150; height: parent.height\n                            Text { anchors.centerIn: parent\n                                   font.pointSize: 10; text: modelData.name }\n                            MouseArea {\n                                id: mouseArea2\n                                anchors.fill: parent\n                                hoverEnabled: true\n                            }\n                }\n                Rectangle {\n                            id: linkField\n                            color: \"lightyellow\";\n                            border.width: 1\n                            width: 300; height: parent.height\n                            Text { anchors.centerIn: parent\n                                   font.pointSize: 10; text: modelData.link }\n                            MouseArea {\n                                id: mouseArea3\n                                anchors.fill: parent\n                                hoverEnabled: true\n                                onPressed: linkField.state = \"PRESSED\"\n                                onReleased: linkField.state = \"RELEASED\"\n                                onClicked: Qt.openUrlExternally(modelData.link)\n                            }\n                            states: [\n                                State {\n                                    name: \"PRESSED\"\n                                    PropertyChanges { target: linkField; color: \"green\"}\n                                },\n                                State {\n                                    name: \"RELEASED\"\n                                    PropertyChanges { target: linkField; color: \"lightyellow\"}\n                                }\n                            ]\n                            transitions: [\n                                Transition {\n                                    from: \"PRESSED\"\n                                    to: \"RELEASED\"\n                                    ColorAnimation { target: linkField; duration: 1000}\n                                },\n                                Transition {\n                                    from: \"RELEASED\"\n                                    to: \"PRESSED\"\n                                    ColorAnimation { target: linkField; duration: 1000}\n                                }\n                            ]\n                }\n            }\n        }\n    }\n}<\/pre>\n<h1>And that&#8217;s it<\/h1>\n<p>I hope you liked reading and you will enjoy using it to make beautiful widgets and forms. If you have questions or inputs, feel free to add a comment.<br \/>\n&#8230; and in&nbsp;case you still asking where the promised unicorns are. Here&#8217;s is a super-fancy implementation \ud83d\ude09<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_fancy-1.gif?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4350\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_fancy-1.gif?resize=750%2C316&#038;ssl=1\" alt=\"\" width=\"750\" height=\"316\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As promised some time ago in&nbsp;&#8222;The new QML widgets in QGIS \u2013 When widgets get unbridled&#8220; we still owe you some fancy unicorns, but first let&#8217;s have a look at another nice feature that has been introduced in QGIS 3.4 LTR,&nbsp; the reading of PostgreSQL JSON and JSONB types. With [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":4770,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6,15,17,19],"tags":[125],"class_list":["post-4365","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","category-qgis","category-qml","category-scripts","tag-qgis-org"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/blog_qml_qml_fancy-1.gif?fit=889%2C375&ssl=1","jetpack-related-posts":[{"id":4330,"url":"https:\/\/www.opengis.ch\/de\/2018\/11\/06\/qml-widgets-qgis\/","url_meta":{"origin":4365,"position":0},"title":"The new QML widgets in QGIS &#8211; When widgets get unbridled","author":"Dave Signer","date":"6. November 2018","format":false,"excerpt":"Individuality is the definition of freedom. And freedom is the fundamental requirement of man\u2019s mind. QGIS possibly cannot give you all the freedom you require in life. But at least a lot of freedom in how you manage your work. QGIS 3.4.0 LTR was released last week and it comes\u2026","rel":"","context":"In &quot;GIS&quot;","block_context":{"text":"GIS","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/pie_chart.png?fit=1067%2C521&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/pie_chart.png?fit=1067%2C521&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/pie_chart.png?fit=1067%2C521&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/pie_chart.png?fit=1067%2C521&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2018\/11\/pie_chart.png?fit=1067%2C521&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":8308,"url":"https:\/\/www.opengis.ch\/de\/2019\/12\/12\/qgis-on-the-road-episode-4\/","url_meta":{"origin":4365,"position":1},"title":"QGIS on the Road: Episode IV &#8211; A New Hope","author":"Marco Bernasocchi","date":"12. Dezember 2019","format":false,"excerpt":"Maya is coming back with a lot of new ideas, demanding more QGIS power. Since she has received plenty of great feedback on honey from hives located at certain spots, she wants to have full overview over the whole area now.","rel":"","context":"In &quot;QGIS on the road&quot;","block_context":{"text":"QGIS on the road","link":"https:\/\/www.opengis.ch\/de\/category\/events\/qgis-on-the-road\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_04.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_04.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_04.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_04.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_04.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":11735,"url":"https:\/\/www.opengis.ch\/de\/2020\/10\/20\/qfield-1-7-rockies-hits-the-stage\/","url_meta":{"origin":4365,"position":2},"title":"QField 1.7 Rockies hits the stage","author":"Dave Signer","date":"20. Oktober 2020","format":false,"excerpt":"QField 1.7 Rockies hits the stage! Be ready for the cold weather with a smooth coordinate search, value relation filters, all new data-driven QML & HTML widgets, enhanced geometry editing functionalities and an expandable legend.","rel":"","context":"In &quot;Android QGIS&quot;","block_context":{"text":"Android QGIS","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/qfield\/android-qgis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2020\/10\/qml_land_trans.png?fit=1200%2C643&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2020\/10\/qml_land_trans.png?fit=1200%2C643&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2020\/10\/qml_land_trans.png?fit=1200%2C643&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2020\/10\/qml_land_trans.png?fit=1200%2C643&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2020\/10\/qml_land_trans.png?fit=1200%2C643&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":8305,"url":"https:\/\/www.opengis.ch\/de\/2019\/12\/10\/qgis-on-the-road-episode-3\/","url_meta":{"origin":4365,"position":3},"title":"QGIS on the Road: Episode III &#8211; Attack of the Destructor","author":"Marco Bernasocchi","date":"10. Dezember 2019","format":false,"excerpt":"After Maya realizes that many of her beehives have been infected by severe diseases she needs to act quickly to get an overview of the situation. She grabs some friends and tablets and launches QField to map the situation. After assessing the results with advanced configuration of the attribute table\u2026","rel":"","context":"In &quot;QGIS on the road&quot;","block_context":{"text":"QGIS on the road","link":"https:\/\/www.opengis.ch\/de\/category\/events\/qgis-on-the-road\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_03.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_03.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_03.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_03.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2019\/12\/episode_03.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":12165,"url":"https:\/\/www.opengis.ch\/de\/2021\/06\/08\/qfieldcloud-now-opensource-happy-10-years-of-field-mapping-with-qgis\/","url_meta":{"origin":4365,"position":4},"title":"QFieldCloud now opensource &#8211; Happy 10 Years of field mapping with QGIS","author":"Marco Bernasocchi","date":"8. Juni 2021","format":false,"excerpt":"Today, on QField's 10th anniversary, we're extremely proud to publish the results of over 18 months of development and give you the source code of QFieldCloud to go and make your awesome adaptations, solutions, and hopefully contributions :) If you want to quickly try it out, head to\u00a0https:\/\/qfield.cloud where our\u2026","rel":"","context":"In &quot;QField&quot;","block_context":{"text":"QField","link":"https:\/\/www.opengis.ch\/de\/category\/gis\/qfield\/"},"img":{"alt_text":"QField git history","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2021\/06\/qfield-git-history.png?fit=660%2C280&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2021\/06\/qfield-git-history.png?fit=660%2C280&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2021\/06\/qfield-git-history.png?fit=660%2C280&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":1726,"url":"https:\/\/www.opengis.ch\/de\/2015\/07\/29\/postgres-expression-compiler\/","url_meta":{"origin":4365,"position":5},"title":"Postgres Expression Compiler for QGIS","author":"Matthias Kuhn","date":"29. Juli 2015","format":false,"excerpt":"Performance This project is all about performance of QGIS with a postgres\/postgis database. A lot of people have QGIS connected to postgres\/postgis (if you don't: it's a great combination in the open source geo stack). Databases are really optimized for querying. They keep indexes of geometries to be able to\u2026","rel":"","context":"In &quot;Uncategorised&quot;","block_context":{"text":"Uncategorised","link":"https:\/\/www.opengis.ch\/de\/category\/uncategorised\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_shortlink":"https:\/\/wp.me\/pbdBtI-18p","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts\/4365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/comments?post=4365"}],"version-history":[{"count":3,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts\/4365\/revisions"}],"predecessor-version":[{"id":4778,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/posts\/4365\/revisions\/4778"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/media\/4770"}],"wp:attachment":[{"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/media?parent=4365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/categories?post=4365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.opengis.ch\/de\/wp-json\/wp\/v2\/tags?post=4365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}