0

String auslesen

Servus zusammen, 

 

ich stehe gerade hoffentlich vor einem einfachen Problem. 

 

Nach einem http POST request erhalte ich folgendes result: {"Success":"True","Error":"","Result":"15980","Topic":"CreateCustomerOrder",...}{"d":null}

 

Jetzt würde ich gerne die Nummer 15980 von oben in einem eigenen Zahlenfeld abspeichern. 

 

Komme da gerade nicht wieter und würde mich über eure Hilfe freuen. 

 

Viele Grüße,

Andi

9 Antworten

null
    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Andi. Zugegeben, hab ich nicht viel Ahnung von. Normalerweise (?) sind ja die requests verschachtelt

    let dict := {
            id: 007,
            createdAt: "3422-07-14T17:00:30",
            createdBy: "captain",
            modifiedAt: "3422-07-14T17:00:30",
            modifiedBy: "Spok",
            fields: {
                Vorname: "Tiberius",
                Name: "Kirk",
            }
        };
    

    und nicht nebeneinander wie bei Dir oben. Aber die Abfrage dieses,  "Key-Value"-artigen Dictionarys geht im Prinzip so:

    let dict := {
            Success: "True",
            Error: "",
            Result: "15980",
            Topic: "CreateCustomerOrder"
        };
    first(dict).Result
    

    Schau mal, was geht. Oder ein Wissender antwortet noch.

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    @Mirko hat das  schon richtig ausgeführt, wobei das 'first' in Mirkos Beispiel weggelassen werden kann:
    Aber bist du sicher, daß das Result genau in dieser Schreibweise zurückgegeben wird.
    Was mich an der Darstellung stört ist das Objekt {"d":null} welches ohne jegliche Anbindung hinten steht.
    Normalerweise ist die Schreibweise bei mehreren Objekten  diese in ein Array zu packen:
    result : [{Objekt1},{Objekt2}] oder weitere Verschachtelungen.

    Da kommt man an den Inhalt der Objekte mit:
    item(result,0).Result, wobei 0 für das erste Objekt steht.
    Mit einer Schleife kann man bspw. dann durchiterieren, wenn man an die Daten aller Objekte kommen möchte
    for i in result do
    let vResult := item(result,i).Result
    end

    Vielleicht hast du dich auch nur verschrieben in der Fragestellung und Mirko's Lösung führt dich direkt zum Ziel.

    • Andi_Neumaier
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi zusammen, 

     

    führt leider beides noch nicht zum Erfolg. Das Hauptsächliche Problem sehe ich daran, dass sowohl die Feldnamen/Objekte, als auch die Werte/Inhalt in " " stehen. {...,"Result":"15980",...}.

     

    Bei einem anderen API Call, verwerte ich das result genauso wie du geschrieben hast  UweG und da klappt auch alles. Da sind allerdings nur die Werte/Inhalt in " " angegeben. 

     

    Vielleicht noch ne andere Idee? 

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Andi Neumaier Kannst du den vollständigen Response in eineText-Datei packen und hier mal hochladen. Dann kann man sich das genauer ansehen. Dein Code-Schnipsel, wie er von dir veröffentlicht wurde kann eigentlich nicht stimmen.

    • Andi_Neumaier
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi Uwe, 

    ich lasse den kompletten response jetzt mal so in ein Textfeld ausgeben: 

    if response.error then
        alert(response)
    else
        'Result Text' := text(response)
    end
    

    Das Textfeld sieht dann so aus: 

    {"result":"{\"Success\":\"True\",\"Error\":\"\",\"Result\":\"15989\",\"Topic\":\"CreateCustomerOrder\",\"Database\":\"Test\",\"Username\":\"Test\",\"Timestamp\":\"2022-08-14 10:59:26\"}{\"d\":null}"}

     

    Wenn ich nur das response.result in das Textfeld ausgeben lasse, sieht es so aus: 

    {"Success":"True","Error":"","Result":"15980","Topic":"CreateCustomerOrder",...}{"d":null}

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Aus diesem Response wirst du mit den üblichen Ninox-Verfahrensweisen nichts raus bekommen, da es sich in seiner Gesamtheit nicht um ein JSON-Objekt handelt. 
    Unter der Prämisse, daß bei jedem Response das Objekt {"d":null} hinten angehängt ist geht folgendes:

    replace(response.result, "{""d"":null}", "")).Result

    Ansonsten musst du versuchen mit regex den String zu sezieren um an den Wert zu gelangen oder irgendwie das erste Objekt zu separieren um mit Objekt.Result den Wert zu erhalten.

      • Andi_Neumaier
      • vor 1 Jahr
      • Gemeldet - anzeigen

      UweG selbst damit klappts leider nicht. Hatte ich auch schon ausprobiert gehabt. Ich denke, dass liegt tatsächlich an den Anführungszeichen, die nicht nur bei den Werten, sonder auch bei den Feldnamen gesetzt sind. 

      Ich befürchte mir bleibt nichts anderes übrig als mich mal mit regex zu beschäftigen. 

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Andi Neumaier Es liegt nicht an den Anführungszeichen.
      Ich habe den Text inkl. Anführungszeichen in ein Textfeld kopiert.

      Mit: 

      parseJSON(replace('Text (mehrzeilig)', "{""d"":null}", "")).Result

      erhalte ich genau das Ergebnis von 'Result'.

      • Andi_Neumaier
      • vor 1 Jahr
      • Gemeldet - anzeigen

      UweG Habe vor lauter rumprobieren das parseJSON beim letzten versuch vergessen. Funktioniert natürlich so. 

      Werde mal etwas testen und sollte nicht bei jedem Response das Objekt {"d":null} angehängt sein, mich mal mit regex beschäftigen. 

      Vielen Dank schonmal für deine Hilfe!

      LG, Andi

Content aside

  • vor 1 JahrZuletzt aktiv
  • 9Antworten
  • 161Ansichten
  • 4 Folge bereits