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
-
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.
-
@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. -
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?
-
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}
-
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.
Content aside
- vor 2 JahrenZuletzt aktiv
- 9Antworten
- 180Ansichten
-
4
Folge bereits