{"id":1542,"date":"2016-08-05T20:44:30","date_gmt":"2016-08-05T20:44:30","guid":{"rendered":"http:\/\/wp.andreas.bieri.name\/myblog\/?p=1542"},"modified":"2016-08-05T20:44:30","modified_gmt":"2016-08-05T20:44:30","slug":"umgang-mit-csv-dateien-mit-powershell","status":"publish","type":"post","link":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/","title":{"rendered":"Umgang mit CSV Dateien mit Powershell"},"content":{"rendered":"<h3>CSV Dateien zusammenbauen<\/h3>\n<p>Wenn Log-Daten in ein CSV geschrieben werden sollen, empfiehlt sich einen Zeitstempel in einem standard Format einzuf\u00fcgen. Die auszugebenden Zeilen k\u00f6nnen aus einzelnen Datenobjekten zusammengestellt oder zeilenweise manuell als String erstellt werden (die offensichtliche Variante). Bei der objektorientierten Herangehensweise kann eine Zeile sukzessive erweitert werden oder in einem Rutsch gebaut werden. Ebenso kann die CSV Datei gesamthaft geschrieben oder zeilenweise erweitert werden (<a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/hh849932.aspx\" target=\"_blank\">Append<\/a>, in fr\u00fcheren PS Versionen nicht vorhanden).<br \/>\nDie Ausschnitte zeigen beide M\u00f6glichkeiten.<\/p>\n<pre>$datefield = Get-Date -DisplayHint Date -Format yyyy-mm-dd-hh-mm\n$imdata1 = \"1\"\n$imdata2 = \"0\"\n$resultsarray =@()\n$resultline = new-object PSObject\n$resultline |\u00a0 add-member -membertype NoteProperty -name \"Date\" -Value $datefield\n$resultline |\u00a0 add-member -membertype NoteProperty -name \"IM_DATA1\" -Value $imdata1\n$resultline |\u00a0 add-member -membertype NoteProperty -name \"IM_DATA2\" -Value $imdata2\n$resultsarray += $resultline \n$resultsarray| Export-Csv .\\CSV-sample-log.csv -notypeinformation<\/pre>\n<p>Alternativ kann man eine Zeile als hashtable von Property Namen und Werten erstellen.<\/p>\n<pre>$newrow = New-Object PSObject -Property @{\nDate\u00a0\u00a0\u00a0 = $datefield\nIM_DATA1 = $imdata1\nIM_DATA2 = $imdata2\n}\n$newrow | Export-Csv .\\powershell_2_csv.csv -Append \u2013notypeinformation<\/pre>\n<p>Das Resultat:<\/p>\n<pre>\"Date\",\"IM_DATA1\",\"IM_DATA2\"\n\"2014-49-08-07-49\",\"1\",\"0\"<\/pre>\n<p>Caveat: De Reihenfolge der Werte in der Ausgabe war in meinen Versuchen immer so wie im Code geschriebenen. Dies ist m\u00f6glicherweise nicht garantiert und man m\u00fcsste (ab PS 3) einen Cast zu [ordered] or [pscustomobject] machen:<\/p>\n<pre>$newrow += [pscustomobject] @{<\/pre>\n<p>&nbsp;<\/p>\n<h3>CSV Dateien speichern<\/h3>\n<p>Das grunds\u00e4tzliche Cmdlet zum Speichern in eine Datei ist Export-CSV. Im Gegensatz dazu gibt das Cmdlet ConvertTo-CSV das Resultat in einen String aus, der dann nat\u00fcrlich in eine Datei geleitet werden kann.\u00a0ConvertTo-CSV dient aber eher dazu, Objekte und ihre Attribute (keine Methoden) zu Weiterverarbeitung als String bereitzustellen. Als Input wird ein PS Object erwartet, in den Beispielen unten wurde das Array\u00a0$DataSet.Tables[0]\u00a0von einer SQL DB Query gef\u00fcllt.<\/p>\n<p>Beispiel: als UTF8 schrieben, Datentyp des PS Objects unterdr\u00fccken, ; als Trenner (-UseCulture nimmt den aktuellen l\u00e4nderspezifischen Wert)<\/p>\n<pre>$DataSet.Tables[0] | Export-CSV -Delimiter \";\" $datafilename -encoding UTF8 -NoTypeInformation<\/pre>\n<p>Beispiel: mit Leerzeichen als Trenner, selektive Auswahl von Attributen<\/p>\n<pre>$DataSet.Tables[0] | Select-Object -Property Day,ReceivedCalls,SuccessfulCalls | Export-CSV $datafilename -Delimiter \" \" -encoding UTF8 \u2013NoTypeInformation<\/pre>\n<p>Beispiel: entfernen von Hochkommata rund um jedem Datenwert<\/p>\n<pre>$DataSet.Tables[0] | ConvertTo-Csv -Delimiter \";\" -NoTypeInformation | % {$_.Replace('\"','')} | Out-File $datafilename<\/pre>\n<p>&nbsp;<\/p>\n<h3>Fileshare verbinden mit verschl\u00fcsseltem Passwort<\/h3>\n<p>Vor dem Speichern in eine Datei m\u00fcssen wir m\u00f6glicherweise einen Fileshare verbinden. Damit man dabei nicht das Passwort im Klartext in das Script schreiben muss, kann man es als Secure String vorg\u00e4ngig abspeichern und bei Bedarf wieder einlesen. Der Secure String verschl\u00fcsselt dabei nicht nur das Passwort, sondern auch die SID des verschl\u00fcsselnden Users und die SID des Computers, worauf dieses Komnando ausgef\u00fchrt wird. Somit ist sichergestellt, dass die Datei mit den gespeicherten Passwort auf keiner anderen Machine und von keinem anderen User benutzt werden kann.<\/p>\n<p>Wir k\u00f6nnen das Passwort von der Konsole interaktiv einlesen und speichern:<\/p>\n<pre>read-host -AsSecureString | ConvertFrom-SecureString | Set-Content c:\\powershell\\pass.txt<\/pre>\n<p>oder initial aus einem Klartext-Passwort heraus erzeugen:<\/p>\n<pre>$secure_string_pwd = ConvertTo-Securestring \"xxxxxx\" -asplaintext -force\nConvertFrom-SecureString\u00a0 $secure_string_pwd | Set-Content c:\\powershell\\pass.txt<\/pre>\n<p>Bei Gebrauch lesen wir es ein:<\/p>\n<pre>$password = Get-Content c:\\powershell\\pass.txt | ConvertTo-SecureString \n$credential = New-Object System.Management.Automation.PSCredential \"DOMAIN\\samaccountname\",$password \nNew-PSDrive -Persist -name P -Psprovider FileSystem -root \\\\server\\share -credential $credential<\/pre>\n<p>&nbsp;<\/p>\n<h3>CSV lesen<\/h3>\n<p>Das Einlesen einer CSV Datei geht komfortabel: man iteriert \u00fcber alle Zeilen. Die einzelnen Felder stehen als Properties $_.propertyname zur Verf\u00fcgung. Import-CSV kennt \u00e4hnliche Optionen wie Export-CSV. Praktisch ist, dass bereits beim Einlesen die Header ge\u00e4ndert werden k\u00f6nnen (sodass die Properties anders heissen werden).<\/p>\n<p>&nbsp;<\/p>\n<pre>Import-Csv -path $inputFile -delimiter ',' |\u00a0 % {\u00a0\u00a0 \n\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # read CSV columns und cast to string\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $myDate = [string]$_.Date\n       $myIM1 = [string]$_.IMDATA1\n       $myIM2 = [string]$_.IMDATA2\n \u00a0\u00a0\u00a0\u00a0 }\n catch {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $logmsg = \"*** test catch error: $error[0]\"\n\u00a0\u00a0\u00a0\u00a0\u00a0  } \n}<\/pre>\n<p>&nbsp;<\/p>\n<h3>Spalten unformatieren und berechnen<\/h3>\n<p>In Powershell ist alles ein Objekt und nicht einfach nur ein String oder ein Array von Buchstaben, wie man es von anderen C-basierten Sprachen her kennt. Als Beispiel f\u00fcr den grossen Komfort, den uns Powershell bietet, hier ein Ausschnitt, wie Resultate aus einer SQL Query \u00fcber Lync Response Groups weiterverarbeitet werden k\u00f6nnen. Vor der Ausgabe in eine CSV Datei werden hier neue Spalten eingef\u00fcgt und deren Werte zeilenweise neu berechnet.<\/p>\n<p>&nbsp;<\/p>\n<pre>$DataSet.Tables[0].Columns.Add(\"Day\") | Out-Null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $DataSet.Tables[0].Columns.Add(\"ReceivedCalls\") | Out-Null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $DataSet.Tables[0].Columns.Add(\"SuccessfulCalls\") | Out-Null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $DataSet.Tables[0].Columns.Add(\"OfferedCalls\") | Out-Null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $DataSet.Tables[0].Columns.Add(\"AnsweredCalls\") | Out-Null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $DataSet.Tables[0].Columns.Add(\"TransferredCalls\") | Out-Null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ($DataSet.Tables[0]) | foreach {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $_.ReceivedCalls\u00a0\u00a0\u00a0 = $_.SOCCnt + $_.FOCCnt\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $_.SuccessfulCalls\u00a0 = $_.SOCCnt + 0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $_.OfferedCalls\u00a0\u00a0\u00a0\u00a0 = $_.SACCnt + $_.FACCnt\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $_.AnsweredCalls\u00a0\u00a0\u00a0 = $_.SLCnt + 0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (-not $_.AnsweredCalls ) {\u00a0 $_.AnsweredCalls = \"9999\"}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $_.TransferredCalls = $_.STCCnt + $_.FTCCnt \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # shorten date (samples column)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $_.Day = ([datetime]$_.Sample).tostring('dd.MM.yyyy')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/pre>\n<p>Die Ausgabe mit Filter haben wir schon angetroffen. Hier werden die neuen Spalten exportiert und die Spalten mit den nicht benutzten Rohdaten unterdr\u00fcckt.<\/p>\n<pre>$DataSet.Tables[0] | Select-Object -Property Day,ReceivedCalls,SuccessfulCalls | Export-CSV $datafilename -Delimiter \" \" -encoding UTF8 \u2013NoTypeInformation<\/pre>\n<p><span style=\"font-size: small;\">\u00a0\u00a0 <\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>CSV Dateien zusammenbauen Wenn Log-Daten in ein CSV geschrieben werden sollen, empfiehlt sich einen Zeitstempel in einem standard Format einzuf\u00fcgen. Die auszugebenden Zeilen k\u00f6nnen aus einzelnen Datenobjekten zusammengestellt oder zeilenweise manuell als String erstellt werden (die offensichtliche Variante). Bei der objektorientierten Herangehensweise kann eine Zeile sukzessive erweitert werden oder in einem Rutsch gebaut werden. Ebenso [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10,6],"tags":[36,100],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Umgang mit CSV Dateien mit Powershell - Merkbar.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Umgang mit CSV Dateien mit Powershell - Merkbar.\" \/>\n<meta property=\"og:description\" content=\"CSV Dateien zusammenbauen Wenn Log-Daten in ein CSV geschrieben werden sollen, empfiehlt sich einen Zeitstempel in einem standard Format einzuf\u00fcgen. Die auszugebenden Zeilen k\u00f6nnen aus einzelnen Datenobjekten zusammengestellt oder zeilenweise manuell als String erstellt werden (die offensichtliche Variante). Bei der objektorientierten Herangehensweise kann eine Zeile sukzessive erweitert werden oder in einem Rutsch gebaut werden. Ebenso [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/\" \/>\n<meta property=\"og:site_name\" content=\"Merkbar.\" \/>\n<meta property=\"article:published_time\" content=\"2016-08-05T20:44:30+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"wp_blogadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/#website\",\"url\":\"http:\/\/52.29.166.97\/myblog\/\",\"name\":\"Merkbar.\",\"description\":\"IT, Elektronik und Mathematik\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/52.29.166.97\/myblog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/#webpage\",\"url\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/\",\"name\":\"Umgang mit CSV Dateien mit Powershell - Merkbar.\",\"isPartOf\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/#website\"},\"datePublished\":\"2016-08-05T20:44:30+00:00\",\"dateModified\":\"2016-08-05T20:44:30+00:00\",\"author\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\"},\"breadcrumb\":{\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\/\/52.29.166.97\/myblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Umgang mit CSV Dateien mit Powershell\"}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\",\"name\":\"wp_blogadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"caption\":\"wp_blogadmin\"},\"url\":\"http:\/\/wp.andreas.bieri.name\/myblog\/author\/wp_blogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Umgang mit CSV Dateien mit Powershell - Merkbar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/","og_locale":"de_DE","og_type":"article","og_title":"Umgang mit CSV Dateien mit Powershell - Merkbar.","og_description":"CSV Dateien zusammenbauen Wenn Log-Daten in ein CSV geschrieben werden sollen, empfiehlt sich einen Zeitstempel in einem standard Format einzuf\u00fcgen. Die auszugebenden Zeilen k\u00f6nnen aus einzelnen Datenobjekten zusammengestellt oder zeilenweise manuell als String erstellt werden (die offensichtliche Variante). Bei der objektorientierten Herangehensweise kann eine Zeile sukzessive erweitert werden oder in einem Rutsch gebaut werden. Ebenso [&hellip;]","og_url":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/","og_site_name":"Merkbar.","article_published_time":"2016-08-05T20:44:30+00:00","twitter_card":"summary","twitter_misc":{"Verfasst von":"wp_blogadmin","Gesch\u00e4tzte Lesezeit":"4 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/52.29.166.97\/myblog\/#website","url":"http:\/\/52.29.166.97\/myblog\/","name":"Merkbar.","description":"IT, Elektronik und Mathematik","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/52.29.166.97\/myblog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"WebPage","@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/#webpage","url":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/","name":"Umgang mit CSV Dateien mit Powershell - Merkbar.","isPartOf":{"@id":"http:\/\/52.29.166.97\/myblog\/#website"},"datePublished":"2016-08-05T20:44:30+00:00","dateModified":"2016-08-05T20:44:30+00:00","author":{"@id":"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d"},"breadcrumb":{"@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/08\/05\/umgang-mit-csv-dateien-mit-powershell\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/52.29.166.97\/myblog\/"},{"@type":"ListItem","position":2,"name":"Umgang mit CSV Dateien mit Powershell"}]},{"@type":"Person","@id":"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d","name":"wp_blogadmin","image":{"@type":"ImageObject","@id":"http:\/\/52.29.166.97\/myblog\/#personlogo","inLanguage":"de","url":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","caption":"wp_blogadmin"},"url":"http:\/\/wp.andreas.bieri.name\/myblog\/author\/wp_blogadmin\/"}]}},"_links":{"self":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/posts\/1542"}],"collection":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/comments?post=1542"}],"version-history":[{"count":0,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/posts\/1542\/revisions"}],"wp:attachment":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/media?parent=1542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/categories?post=1542"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/tags?post=1542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}