Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
{
    "results": [
        {
            "id": 1,
            "created": "2014-12-01T14:25:32",
            "delivery_company": "Testcompany",
            "delivery_firstname": "Max",
            "delivery_lastname": "Mustermann",
            "order_rows": [
                {
                    "sku": "xyz-478",
                    "quantity": 2,
                },
                {
                    "sku": "kbk-123",
                    "quantity": 1,
                }
            ]
        },
        {
            "id": 2,
            "created": "2014-12-01T14:25:32",
            "delivery_company": "Testcompany",
            "delivery_firstname": "Max",
            "delivery_lastname": "Mustermann",
            "order_rows": [
                {
                    "sku": "xyz-478",
                    "quantity": 2,
                },
                {
                    "sku": "kbk-123",
                    "quantity": 1,
                }
            ]
        }
    ]
}


Ziel nach dem Einlesen

...

Parameter
Beschreibung
row
Die Zeile (das Row-Objekt des Spreadsheets), der die Spalten hinzugefügt werden sollen.
node
Der Ober-Knoten (Node) im JSON-Baum, dessen Unterknoten als Spalten hinzugefügt werden sollen.
prefix
optional: Dieser optionale Prefix wird allen hinzugefügten Spaltennamen vorangestellt.

Beispiel:

${addColumns(row, j['shipping_address'], "shipto_address_")}
${addColumns(row, j['billing_address'], "billto_address_")}

Hier werden Spalten eines JSON-Objekts shipping_address und billing_address hinzugefügt. Da beide Adressen Spalten wie Vorname, Nachname enthalten können, ist es sinnvoll diese durch ein Prefix (hier shipping_address_ und billto_address_) von einander abzugrenzen und unterscheidbar zu machen.  
options

Ein Hash/Map (Schlüssel/Wert-Paare) mit optionalen Konfigurationsparametern. Die Notation der options ist technisch gesehen ein JSON-Objekt.
Einige Parameter gehören zusammen (z.B. columns und mode), einige stehen für sich allein oder greifen nur unter bestimmten Bedingungen. Es wird versucht in der Beschreibung deutlich zu machen, wann ein Paramter anwendbar ist.


Beispiel:
Hier werden die beiden Parameter columns und mode dargestellt, die etwas weiter unten noch genauer erklärt werden.

Code Block
languagejs
title2 Parameter: columns und mode
{"columns":["zip", "city"], "mode":"include"}
 
# Etwas lesbarer formatiert, sieht das so aus: 
{
   "columns":[
      "zip",
      "city"
   ],
   "mode":"include"
}

D.h. ein kompletter addColumns-Befehl inkl. options sieht wie folgt aus:

Code Block
${addColumns(row, order['shipping_address'], "", {"columns":["zip", "city"], "mode":"include"})}

Auf die einzelnen Optionsparameter wird im folgenden eingegangen.


Info
titleWichtig

Wird options ohne den prefix Parameter verwendet, dann ist für prefix ein Platzhalter in Form von "" einzufügen.

Beispiel: ${addColumns(row, order['shipping_address'], "", {"columns":["zip", "city"], "mode":"include"})}



columns 
(optional)
&
mode
(optional)

columns: Ein String-Array von Feldnamen, die im Spreadsheet hinzugefügt (include) oder ausgeschlossen (exclude) werden sollen.

mode: Über mode kann man steuern, ob die im Parameter columns definierten Spalten ausgegeben oder ignoriert werden.

  • include (default) - die Spalten in columnsArray werden ausgegeben
  • exclude - die Spalten in columnsArray werden ignoriert / ausgeschlossen


Beispiel: Nur bestimmte Feld ausgeben (include)

${addColumns(row, order['shipping_address'], "shipto_address_", {"columns":["zip", "city"]})}

Diese Zeile sorgt dafür, dass nur die Felder zip und city des Knotens shipping_address im Spreadsheet landen. Alle anderen Address-Felder wie z.B. street oder county werden nicht ausgegeben.
Den optionalen Parameter mode kann man weglassen, da dieser per Default auf "include" steht. D.h. man hätte obige Zeile auch so schreiben können:

${addColumns(row, order['shipping_address'], "shipto_address_", {"columns":["zip", "city"], "mode":"include"})}

Beispiel: Bestimmte Felder ausschließen (exclude)

${addColumns(row, order['shipping_address'], "shipto_address_", {"columns":["zip", "city"], "mode":"exclude"})}

Diese Zeile sorgt dafür, dass alle Felder außer zip und city des Knotens shipping_address im Spreadsheet landen.
In diesem Fall muss der Parameter mode angegeben werden.


Info
titleWichtig

Die eckigen Klammern bei ["zip", "city"] sind wichtig, da dies die Freemarker-Notation für ein Array sind. Bitte nicht vergessen!




skipEmptyValues
(optional)

Über skipEmptyValues (true/false, default: false) kann man steuern, ob man eine Spalte nur hinzufügen möchte, wenn der Wert der JSON-Node nicht leer ist. Das ist praktisch bei riesigen JSON-Dateien, die haufenweise leere Tags enthalten, die man nicht im Output-Spreadsheet sehen möchte. Damit kann man das resultierende Spreadsheet auf die nötigsten nicht-leeren Spalten beschränken.

Code Block
${addColumns(row, order['shipping_address'], "shipto_address_", {"columns":["zip","city"], "skipEmptyValues":true})} 

Diese Zeile sorgt dafür, dass die Felder zip und city dem Spreadsheet hinzugefügt werden, allerdings nur wenn das Feld jeweils gefüllt ist. Wenn z.B. die Spalte zip immer leer wäre, dann würde im Output-Spreadsheet keine Spalte für zip auftauchen.


delimiter
(optional)

&


textqualifier
(optional)

Beide Parameter gehören zusammen und sind nur anwendbar, wenn als node (siehe weiter der 2. Parameter) ein JSON-Array übergeben wird.

delimiter: Das Trennzeichen, durch welches die einzelnen Werte der Array-Elemente getrennt werden.
Default: Komma (,) 


textqualifier: Optionales Zeichen, durch welches die einzelnen Werte der Array-Elemente in der Ausgabe umschlossen werden sollen.

Üblicherweise Hochkomma (') oder doppelte Anführungszeichen (").
Default: leer 

Warning
titleAchtung bei doppelten Hochkomma

Schreiben Sie dazu:

"textqualifier":"\""

Hier muss das Hochkomma durch einen Backslash (\)escaped werden.



Anchor
autoExpandOption
autoExpandOption
autoExpand
(optional)

Dieser Parameter steuert, ob und wie Unter-Objekte automatisch "aufgeklappt" werden, wenn deren Wert ebenfalls wieder ein JSONObject ist.
Ohne Angabe von autoExpand, werden diese komplexen Felder einfach als JSON-String ausgegeben. Man könnte dieses komplexe Feld durch einen weiteren Aufruf der ${addColumns()} Funktion als Spalten hinzufügen.
Durch die Option autoExpand, kann man sich diesen weiteren Aufruf sparen, und die Felder werden sofort hinzugefügt. Da dieses Verhalten nicht immer gewünscht ist, ist dies optional. Das spart unter Umständen einiges an Tipparbeit.

  • asColumns - fügt die Felder des Unterobjekts als neue Spalten hinzu. Dabei werden die Feldnamen des Unterobjekts automatisch mit dem Schlüssel (Key) des Felders ge-prefixt (z.B. billing_address_street, billing_address_city)
  • asRows - Spezial-Fall: Jeder Schlüssel des Unterobjekts erscheint in einer extra Zeile und die Felder des Objekts in extra Spalten.

Beispiel asColumns:

Code Block
languagejs
titleJSON Input
{
    "orders": [
        {
        	"order_id": "O123",
            "billing_address": {
                "city": "Jena",
                "street": "Meine Straße 1a"
            }
        }
    ]
}


Code Block
<#assign row = target.addRow()>
<#list json["orders"] as j >
	<#assign row = target.addRow()>
	${addColumns(row, j, "order_", {"autoExpand":"asColumns"})}
</#list>

Ergebnis:

order_order_idorder_billing_address_cityorder_billing_address_city
O123JenaMeine Straße 1a


Beispiel asRows:

Code Block
languagejs
titleJSON Input
{
  "Items":[
     {
        "id1":{
           "Filename":"f1.jpg",
           "Link":"http://www.mywebsite.de/f1.jpg"
        }
     },
     {
        "id2":{
           "Filename":"f2.jpg",
           "Link":"http://www.mywebsite.de/f2.jpg"
        }
     }
  ]  
}


Code Block
<#assign row = target.addRow()>
 
<#list json["Items"] as j >
    <#assign row = target.addRow()>
    ${addColumns(row, j, "Item", {"autoExpand":"asRows"})}
</#list>

Ergebnis

ItemItem_FilenameItem_Link
id1f1.jpg
http://www.mywebsite.de/f1.jpg
id2f2.jpg
http://www.mywebsite.de/f2.jpg


Unterstützung für JSON-Arrays

...