1

Zugriff auf n-ten Schlüssel in einem JSON-Objekt

Ich erhalte über eine REST-API ein JSON-Objekt zurück, das an einer Stelle statt eines statischen Schlüssels eine laufende Nummer einfügt:

{"nr001": {Objekt 1}, "nr002": {Objekt2}, ...}

Es handelt sich nicht um ein Array! Kann ich mit der Skriptsprache trotzdem automatisiert auf diese Werte zugreifen? Gibt es so etwas wie einen Arrayzugriff auf das n-te Objekt bzw. den n-ten Schlüssel?

Danke für die Antworten

Nico

22 Antworten

null
    • Christian.5
    • vor 5 Jahren
    • Gemeldet - anzeigen

    In der Dokumentation https://ninoxdb.de/de/manual/ninox-api/http-aufrufe steht was von item. Tut das nicht,  was du willst?

    • Christian.5
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Sehe gerade, dass du ein Objekt statt eines Arrays bekommst. Dann müsste eigentlich der Zugriff über die Punktnotation möglich sein. Allerdings sehe ich nicht, wie du den Attributnamen "nr001" etc. programmatisch konstruieren kannst.

    In JavaScript wäre es leicht...

    • Christian.5
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Anderswo habe ich gerade diese Notation gesehen:

    data.result.['0']

    Vielleicht hilft das?

    • Gunther.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Man kann mit item(Response,<ObjectBezeichner>) zugreifen:

    Beispiel:

    let xx := {"nr001": {"ob1":123}, "nr002": {ob2:456}}
    item(xx,"nr002").ob2

    Ergibt: 456

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    @Günther - das ist genial.
    @Copytexter - falls du den Post liest, kannst du bitte in deine Datenbank übernehmen? Ich habe, ehrlich gesagt, kein Thema gefunden, wo ich diese Funktonalität am besten unterbringe.

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, das mache ich grundsätzlich sehr gerne. Problem: Um etwas zu erläutern, muss ich es selbst erst mal verstehen, zumindest halbwegs. Und mit diesen API/JSON-Geschichten kenne ich mich nicht wirklich aus.

    Da ich außerdem auch nicht so recht wusste, wohin damit, habe ich in der Funktions-Referenz den vorhandenen "item()"-Eintrag in "item(ARRAY)" umbenannt, einen zweiten Eintrag namens "item(JSON)" erstellt und diesen der Kategorie "Web und Integration" zugeordnet.

    Da stehen aber jetzt auch erst mal nur Minimal-Infos drin, von denen ich nicht weiß, ob sie stimmen. So habe ich bspw. auch das 'ob2' in Anführungszeichen gesetzt, aber eher so aus dem Bauch heraus ... ;)

    Bitte schaut doch mal rein und korrigiert bzw. ergänzt die Angaben. Nicht, dass da totaler Unsinn steht. Danke!

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    @Günther und Leo: Habt ihr euch den neuen Eintrag in der "0001_Ninox-Referenz" schon mal angesehen? Ist er so in Ordnung? Es wäre nett, wenn ihr mal kurz Rückmeldung dazu geben könntet. Ich übernehme das Eintragen gerne, bin in solch speziellen Fällen aber auf eure Unterstützung angewiesen.

    • Gunther.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Alles bestens, Danke. 

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen,

    wenn habe ich json := {"nr001":[{"ob1":123},{"ob2":456}]}, dann wie kann mann die ob2 ergebnis finden?

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo zusammen,

    wenn habe ich json := {"items":[{"obj1":1,"obj2":null,"obj3":"54634"}]}, dann wie kann mann die ob2 ergebnis finden?
     

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Kumar,

    ---

    let json := {
    items: [{
    obj1: 1,
    obj2: null,
    obj3: "54634"
    }]
    };
    let ob2Value:=item(first(json.items), "obj2")

    ---

    Leo

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke das geht. Vielleicht kann du wieder helfen. Wie kann ich string von liste kriegen. z.B list = ["list1","list2"]. Kann ich gleich probieren, wie du hast oben für json gezeigt?

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    concat(list) gibt die kommagetrente Liste des Arrays zurück ,

    formatJSON(list) wandelt einen Objekt in String. (inklusive ekklammeen),

    join(list,"string") gibt die Auflistung getrennt durch String

     

    hilft dir das weiter?

    Leo

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ja danke, aber wenn ich nur erste werte der liste kriegen lassen möchte, dann wie kann ich machen? 

    list = ["list1","list2"]

     

    was ist meine erste string von liste. meine erwartung ergebnis soll, erste string von lsite ist list1.

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Normale weise die muß mit  item(["der", "die" , "das"], 1) ➤ Ergebnis: "die" (String, wie Array) 

     

    aber bei mir geht nicht.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    also erste mit first(array). Ansonsten item(array,0). bei mir funktioniert ohne Probleme.

    ---

    let myArray:=["der", "die" , "das"];

    let myFirstValue:=item(myArray,0);

    myFirstValue

    ---

    Leo

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leonid,

    Danke. 

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wie kann mann zwei json body zusammengeführt ? 

     

    JSON1 : {"key1" : "val1"}, und JSON2 : {"key2" : "val2"} und meine erwartet ergebnis soll JSON_merged : {"key1" : "val1", "key2" : "val2"}.

     

    Wie kann ich machen?

     

    VG

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    ---

    let JSON1 := {key1: "val1"};
    let JSON2 := {key2: "val2"};
    let myString := formatJSON([JSON1, JSON2]);
    myString := replace(myString, "},{", ",");
    let myJSONmerged:=first(parseJSON(myString))

    ---

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke. 

    Ich habe mit JSON gearbeitet, aber komm ich nicht klar. Vielleicht Sie könne helfen. 

    jsonstring := {"items":["{"key1":"val1"},{"key2":"val2"}"],"key3":"val3"} wegen zwei Anführungszeichen komme ich n icht weiter. Wie kann ich zwei Anführungszeichen entfernen? Meien erwartet soll sein jsonstring := {"items":[{"key1":"val1"},{"key2":"val2"}],"key3":"val3"}

     

    VG

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    replace(replace(jsonstring, "[""", "["), """]", "]")

    • Deepak_Kumar
    • vor 3 Jahren
    • Gemeldet - anzeigen

    danke.