addColumns und addCol, jsonArray Problem

Hallo zusammen,
wenn ich addColl nutze und Element 1_a hinzufüge, wird korrekt jsonArray hinzugefügt:

[ {„2_a“: „aaa“}, {„2_b“: „bbb“} ]

wird addCollumns angewendet, werden die Eckige Klammern entfernt.

{„2_a“: „aaa“}, {„2_b“: „bbb“}

fett gedruckter TextBeispiel:

{
  "0_a":[
     "1_a":[
        {"2_a": "aaa"},
        {"2_b": "bbb"}
      ]
   ]
}

Ist möglich bei addCollumns das Löschen den Klammern zu verhindern?

Grüße,
Remi

Nein. addColumns versucht ja durch verschiedene Magic dein JSON in ein Spreadsheet umzuwandeln. Vermutlich erkennt es ein Array (eckige Klammern) und schreibt die einzelnen Elemente raus.

Wenn du keine Magic willst musst du addCol nehmen.

Gern kannst du auch nochmal deine JSON-Quelle und deine Wunsch-Zieltabelle zeigen, denn leider wird nicht klar, was du eigentlich erreichen möchtest? Möchtest du einzelne Spalten mit JSON-Fragmenten füllen?

Konkret möchte ich das „jsonArray“ aus dem Element „1_a“ hollen um weiter als Json zu benutzen (parsen u.Ä.). addCollumns liefert in diesem Fall kein valides Json.

quelle

{ 
   "items":[
      {"obj_1":"Object 1"},
      {"obj_2":"Object 2"}
   ]
}
<#assign row = target.addRow()>

<#list json as j >
   ${addColumns(row, j["items"], "items_")}
</#list>

Ergebnis sollte ein String Sein wie:
[{"obj_1":"Object 1"}, {"obj_2":"Object 2"}]

Da geht leider nur mit addCol. Ich dachte addCollumns macht das gleiche für eine liste von Elementen.

Vielen Dank,
Remi

Nein. Aber verständlich, dass der Name das vermuten lässt… können wir leider nicht mehr umbenennen :slight_smile:

Die Doku von addColumns hast du gesehen?

Hier mal noch ein Beispiel, wie du dein Objekt einlesen könntest.

<#assign row = target.addRow()>

<#list json['items'] as item >
  <#assign row = target.addRow()>
   ${addColumns(row, item, "items_")}
</#list>

Das gibt dir direkt eine Tabelle.
image

Du könntest dann damit z.B. per TextHTMLWriter und Scripting ein neues JSON erzeugen, wenn du unbedingt JSON brauchst.

Hier mal noch eine Alternative, wenn du wirklich nur das JSON-Array brauchst:

<#assign row = target.addRow()>
<#assign row = target.addRow()>
${row.addCol("myarray", json["items"])}

Sieht dann so aus:

image

Hier der Flow zum importieren und testen:
FlowExport-1-Click-Flows-1-Click-Flow_3.json (4,4 KB)

Danke für die Antwort,

das zu zerlegen und dann wieder ein Json zu bauen ergibt im meinem Fall keinen Sinn.
Ich nutzte momentan addCol aber bei vielen Objekten ist das eine Schreiberei ;).

Dann habe ich keine andere Wahl.

Danke für Ihre Antworten

Remi

D.h. die Quelle oben war noch nicht alles? Oder was heißt „viele Objekte“?

Geht das letzte Beispiel schon die Richtung? Es sieht ja zumindest so aus, wie dein Ziel-String:

Vielleicht noch ein Hinweis auf die firstRow(columnname) Funktion:

Damit kann man sich den Wert aus der ersten Zeile einer Spalte holen und hat das als String:

${output@JSON2Spreadsheet_2.firstRow("myarray")!}

sollte dann genau sowas geben:

[{"obj_1":"Object 1"}, {"obj_2":"Object 2"}]

Hi,

addCol macht das schon richtig,
aber beim Komplexen Strukturen wie hier ist das schon eine lange liste:

{
  "items": [
    {
      "values": {
        "obj_1": [
          {
            "data": "Top",
            "locale": "en_US",
            "scope": null
          }
        ],
       .....
        "obj_100": [
          {
            "data": "Summer top",
            "locale": "en_US",
            "scope": "ecommerce"
          }
        ]
      }
    }
  ]
}

sieht dann es folgend aus:

<#assign row = target.addRow()>

<#list json as j >
   <#list json["_embedded"]["items"] as i >
      <#assign row = target.addRow()>
      ${row.addCol("obj_1", i["values"]["obj_1"])}
       ...
      ${row.addCol("obj_100", i["values"]["obj_100"])}
   </#list>
</#list>

Ergebnis einer Column:

[{ "data": "Top","locale": "en_US", "scope": null }]

Remi

Mit folgender Variante geht das evtl. auch generisch mit weniger Tiparbeit.

<#assign row = target.addRow()>

<#list json['items'] as item >
  <#assign row = target.addRow()>

	<#list item['values'] as key, value >
		${row.addCol(key, value)}
    </#list>
</#list>

sieht dann so aus:

Klingt nach einer Mischung aus dem und dem hier.

Da hat mir gefehlt:

Jetzt habe ich das auch in Doku gefunden. :slight_smile:

Danke!
Remi

1 „Gefällt mir“