json Auswerten mit Variable
Hallo zusammen!
Vielleicht kann mir jemand helfen?
Ich weiß hier nicht mehr weiter.
Ich möchte grundlegend auf eine andere Datenbank von mir zugreifen und ein bestimmtes Feld/Attribute mit einem in der vorhandenen Datenbank vergleichen. Weil ich das öfters brauche, würde ich das ganz gerne als eigene globale Funktion bereitstellen.
Der Zugriff auf die 2. Datenbank funktioniert auch schon (via Rest API und HTTP Aufruf) ganz gut und bekomm auch schon ein brauchbares json.
Jedoch will ich ein bestimmtes Feld via Variable (Definition in der Funktion ==> 'Feld') ansprechen. Dies gelingt mir aber nicht.
Hier mein Code bisher:
function getRestField(Team : text,Datenbank : text,Tabelle : text,Feld : text,Wert : text) do
var a := "";
let api := (select Parameter)[Id = 2];
let mykey := api.Text;
let urlDefault := "https://api.ninoxdb.de/v1";
let team := api.(select Detail)[Name = "teams"].(select Detail2)[Name = Team].Label;
let database := api.(select Detail)[Name = "databases"].(select Detail2)[Name = Datenbank].Label;
let table := api.(select Detail)[Name = "tables"].(select Detail2)[Name = Tabelle].Label;
let url := urlDefault + "/teams/" + team + "/databases/" + database + "/tables/" + table + "/records";
let response := http("GET", url, {
Authorization: "Bearer " + mykey
}, {
'Content-Type': "application/json"
});
if response.error then
a := text(response.error) + " (" + url + ")"
else
for item in response.result do
if text(item.fields) = Wert then
a := Wert
end
end
end;
text(a)
end
Ausführen würde ich dann die Funktion so:
getRestField("TeamName","Datenbank2Name","TabelleXName","FeldYName", "xyzString")
Danke für eure Hilfe
BR Stefan
5 Antworten
-
Der Schlüssel ist hierbei die Funktion item(object, key):
item({feld:"Wert}, "feld")
liefert zum Beispiel "Wert" zurück
-
item({feld:"Wert"}, "feld")
-
Danke Frank für die Antwort. Jedoch meinte ich eigentlich das Ansprechen eines Objektes innerhalb der fields durch eine definierte Variable
Mit:
a := text(item(response.result, 0).fields)
Erhalte ich das Ergebnis:
{"Lieferanten Nr":"S001","Straße":"Hudsonweg 8",...}
Mit:
a := text(item(response.result, 0).fields.'Lieferanten Nr')
Erhalte ich das Ergebnis:
S001
Somit möchte ich jetzt mit der Variablen Definition Feld="Lieferanten Nr" das Hardcodierte ersetzen.
-
Habe es jetzt gelöst mit einer for Schleife:
function getRestField(Team : text,Datenbank : text,Tabelle : text,Feld : text,Wert : text,recFeld: text) do
...
for item in response.result do
if text(item(item.fields,Feld)) = Wert then
a := text(item(item.fields,recFeld)
end
end...
end
Abfragen tue ich es jetzt mit:
getRestField("TeamName","Datenbank2Name","Lieferanten","Lieferanten Nr", "S001","Straße")
Als Ergebnis erhalte ich jetzt:
Hudsonweg 8
-
Spannende Lösung!
@Ninox-Team: Geht das nicht irgendwie einfacher? Ich stehe im Moment vor demselben Problem, dass ich ein JSON Objekt mit mehreren Hierarchiestufen zurückbekomme, welche ich dynamisch auswerten möchte. Kann man das nicht direkt mit Variabeln in einer JSON-Abfrage machen? Sprich:
response.result.'NINOX-Feld1'.'NINOX-Feld2'.....
Das wäre echt hilfreich und würde vieles vereinfachen!
Content aside
-
1
„Gefällt mir“ Klicks
- vor 3 JahrenZuletzt aktiv
- 5Antworten
- 2956Ansichten
-
1
Folge bereits