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
-
In der Dokumentation https://ninoxdb.de/de/manual/ninox-api/http-aufrufe steht was von item. Tut das nicht, was du willst?
-
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...
-
Anderswo habe ich gerade diese Notation gesehen:
data.result.['0']
Vielleicht hilft das?
-
Man kann mit item(Response,<ObjectBezeichner>) zugreifen:
Beispiel:
let xx := {"nr001": {"ob1":123}, "nr002": {ob2:456}}
item(xx,"nr002").ob2Ergibt: 456
-
@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
-
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!
-
@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.
-
Alles bestens, Danke.
-
Hallo zusammen,
wenn habe ich json := {"nr001":[{"ob1":123},{"ob2":456}]}, dann wie kann mann die ob2 ergebnis finden?
-
Hallo zusammen,
wenn habe ich json := {"items":[{"obj1":1,"obj2":null,"obj3":"54634"}]}, dann wie kann mann die ob2 ergebnis finden?
-
Hallo Kumar,
---
let json := {
items: [{
obj1: 1,
obj2: null,
obj3: "54634"
}]
};
let ob2Value:=item(first(json.items), "obj2")
---
Leo
-
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?
-
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
-
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.
-
Normale weise die muß mit
item(["der", "die" , "das"], 1) ➤ Ergebnis: "die" (String, wie Array)
aber bei mir geht nicht.
-
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
-
Hallo Leonid,
Danke.
-
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
-
---
let JSON1 := {key1: "val1"};
let JSON2 := {key2: "val2"};
let myString := formatJSON([JSON1, JSON2]);
myString := replace(myString, "},{", ",");
let myJSONmerged:=first(parseJSON(myString))
---
-
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
-
replace(replace(jsonstring, "[""", "["), """]", "]")
-
danke.
Content aside
-
1
„Gefällt mir“ Klicks
- vor 3 JahrenZuletzt aktiv
- 22Antworten
- 2559Ansichten
-
1
Folge bereits