1

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

null
    • Frank_Bohmer
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Der Schlüssel ist hierbei die Funktion item(object, key):

    item({feld:"Wert}, "feld")

    liefert zum Beispiel "Wert" zurück

    • Frank_Bohmer
    • vor 5 Jahren
    • Gemeldet - anzeigen

    item({feld:"Wert"}, "feld")

    • netsigmund
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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.

    • netsigmund
    • vor 5 Jahren
    • Gemeldet - anzeigen

    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

    • FLYER AG
    • Simon_Lanz
    • vor 3 Jahren
    • Gemeldet - anzeigen

    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
  • 2910Ansichten
  • 1 Folge bereits