0

Array in http function

http function - Informationen zu Bildern als JSON Array ausgeben, nur wenn die Bilder vorhanden sind.

Ich versuche seit Stunden folgendes umzusetzen:

Ich habe einen Datensatz mit Feldern für Bilder. Für jedes Bild gibt es folgende Felder

Bild
Alttext (text)
Position (text)
Update (boolean)

Am Ende möchte ich gerne, dass ein Array innerhalb des Bodybereiches entsteht, das für jedes Bild, das vorhanden ist, ein Object ausgibt, etwa so:

"images":[
{
"Bild": "shareFileBildPfad",
"Alttext": "AlttextFeldIhnalt",
"Position": "PositionFeldinhalt",
"Update":"textVonBooleanFeld"
},
{
"Bild": "shareFileBildPfad",
"Alttext": "AlttextFeldIhnalt",
"Position": "PositionFeldinhalt",
"Update":"textVonBooleanFeld"
},
{
"Bild": "shareFileBildPfad",
"Alttext": "AlttextFeldIhnalt",
"Position": "PositionFeldinhalt",
"Update":"textVonBooleanFeld"
}
]

Ich schwöre, ich habe alles versucht. Irgendwie, kommt mir immer das Komma in die Quere, welchen die Objects trennt, also hier

},
{

ich habe es versucht mit if (Bedingung) then mit parseJSON usw.

Ich habe alles versucht. Ich schwöre!

Es muss doch irgendwie möglich sein? Kann mir jemand sagen, wie man soetwas macht?

Danke.

11 Antworten

null
    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    let vBody := {
    "Name" : "UweG",
    "images" : for i in select Table1 do
    if i.Bild then
            {
                Bild: i.Bild,
                Alttext: i.Alttext,
                Position: i.Position,
                Update: i.Update
            }
    end
        end,
    "Land" : "Thailand"
    }

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Guten Morgen UweG ,

    das Ding ist, dass die Bilder bei mir nicht in einer Tabelle/Untertabelle liegen, sondern sie sind Felder des eigenen Datensatzes.

    Ich müsste daher wohl etwas haben, dass sozusagen manuell den Inhalt für jedes Feldes abfragt, und dann je nachdem einfügt oder nicht.

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Arwin Dustdar 
      Das verstehe ich leider nicht.
      Kannst du eine Beispiel DB anhängen um das Datenmodell zu sehen und verstehen.

      • Arwin_Dustdar.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      UweG das müsste ich erst basteln, kann ich später machen.

      Aber nochmal zur Erklärung. Ich habe eine Tabelle mit Produktdaten, wie Name, Artikelnummer, Preis, Bild1, Bild2, Bild3…

      Alle Felder sind direkt am Datensatz, keine Verknüpfung.

      am Datensatz habe ich einen Button, der die Ausgabe der Datensatzinhalte via API an den Shop weitergibt.

      Für die Bilder wollte ich dabei in ein Array ausgeben, eben abhängig vom Vorhandensein der Bilder. Ist ein Bild da, kommt es in den Array, sonst nicht.

      egal was ich auf diese Weise im Script mit if then versuche, sobald das Komma ins Spiel kommt, welches die Objekte des Array trennt und dieses eben auch nur abhängig vom Bild da sein darf meckert der Editor.

      Konkreter: ich muss ein Komma zwischen die Objekte bringen, nur dann, wenn ein weiteres Objekt folgt, und genau das (Komma innerhalb „if“ Bedingung) geht nicht.

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Arwin Dustdar 
      Anbei eine Bsp-DB wie ich es verstanden habe:
      Das Script sieht wie folgt aus:
       

      let vArray := for i in range(0, 3) do
              let vBild := eval("Bild" + text(i + 1), this);
              if vBild then
                  {
                      Bild: shareFile(this, last(split(text(vBild), "/"))),
                      Alttext: Alttext,
                      Position: Position,
                      Update: Update
                  }
              end
          end;
      let vBody := {
              Name: "UweG",
              images: vArray,
              Country: "Thailand"
          };

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    UweG vielen Dank. Das muss ich mir später mal ansehen. Die Funktion range() kannte ich noch nicht. 

    Überhaupt, habe ich das noch nicht richtig versucht, das Array außerhalb der http() function schon mal zu bauen, und dann erst als Variable einzufügen.

    Gebe nachher mal ein Feedback.

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    UweG super. Ich habe mir gerade die Beispiel-DB noch angesehen. Das sieht genauso aus, wie ich es brauche. 🙏👍

    Ich muss jetzt erst mal weg. Danach versuche ich dein Beispiel mal mit meiner eigenen Datenbank umzusetzen.

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Arwin Dustdar 

      Schön, dass es funktioniert.
      Sorry, dass ich etwas langsam im Verständnis des Sachverhaltes bin und deshalb nachfrage.

      • Arwin_Dustdar.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      UweG vielen Dank. Das klappt auch in meiner DB perfekt.

      Ich habe allerdings eine erweiterte Herausforderung, und zwar gibt es zu jedem Bild, analog noch weitere 2 Felder, die nach selbem Muster benannt sind, und die ich auch ins Array bekommen muss:

      Die Felder heißen

      Stammbild-Alttext... bis ... Stammbild-Altext9

      und

      Shopify update Bild1... bis ... Shopify update Bild9

      jetzt habe ich (als copy/paster der ich bin :) ) einiges versucht, aber ich bekomme überwiegend nur Fehlermeldungen.

      let vArray := for i in range(0, 8) do
              let vBild := eval("Stammbild" + text(i + 1), this);
              let vAlttext := eval("Stammbild-Alttext" + text(i + 1), this);
              let vUpdate := eval("Shopify update Bild" + text(i + 1), this);
              if vBild then
                  {
                      Bild: shareFile(this, last(split(text(vBild), "/"))),
                      Alttext: vAlttext,
                      Update: vUpdate,
                      Position: number(i + 1)
                  }
              end
          end;
      let vBody := {
              Name: "UweG",
              images: vArray,
              Country: "Thailand"
          };
      Text := formatJSON(vBody)

      Für die Position klappt es, aber die anderen beiden Felder (Alttext und Update) wollen nicht. Ich habe einiges versucht, in Anlehnung an die vBild Variable aber es will mir nicht gelingen.

      Kannst du mir hier nochmal weiterhelfen? 

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Arwin Dustdar 

      Wenn du Sonderzeichen/Leerzeichen in den Feldnamen hast muss es wie folgt definiert werden:
               let vBild := eval("Stammbild" + text(i + 1), this);
               let vAlttext := eval(---'Stammbild-Alttext--- + text(i + 1)+---'---, this);
               let vUpdate := eval(---'Shopify update Bild--- + text(i + 1)+---'---, this);

    • Arwin_Dustdar.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    UweG tausend Dank. Wie cool ist das! Klappt perfekt.