mergeJSON()
Weil es die Funktion in Ninox ja meines Wissens ja nicht gibt hab ich mir selber geholfen.
Kurz zum Ziel:
mergeJSON - zwei 2-diemsionale JSON-Objekte sollen verschmolzen werden. Also zum Beispiel:
let json1 := [{name: "Hans", nachname: "Meier", alter: 22}] und
let json2 := [{name: "Fritz", nachname: "Müller", alter: 33}].
Ich dachte ja eigentlich das könnte man mit der array()-Funktion bewerkstelligen, also:
let merged := array(json1, json2)
Das ergäbe aber das Objekt:
[[{name: "Hans", nachname: "Meier", alter: 22}] , [{name: "Fritz", nachname: "Meier", alter: 22}]]
gewünscht ist aber:
[{name: "Hans", nachmane: "Meier", alter: 22}, {name: "Fritz", nachmane: "Müller", alter: 33}]
Jetzt habe ich mir eine Funktion "gebastelt", die die JSON-Objekte zunächst per formatJSON() in Strings konvertiert und am Ende per parseJSON() wieder in ein JSON-Objekt wandelt:
function mergeJSON(objekte : any[]) do
"1. Jedes Objekt in einen Text umwandeln und in ein neues Text-Array schreiben";
let stringArray := for i in objekte do
let str := formatJSON(i);
if i != null then
substring(str, 1, length(str) - 1)
end
end;
"2. Die Texte mit Komma verbinden und in eckige Klammern setzen";
let finalString := "[" + join(stringArray, ",") + "]";
"3. Zurück in ein echtes JSON-Array parsen";
parseJSON(finalString)
end;
Gibt es da keine elegantere Lösung? Man kann sich vorstellen, dass das bei großen Objekten ziemlich langsam ist...
3 Antworten
-
Moin ,
solange man die JSON nicht aus Textfeldern holt oder ganz bestimmte Sonderkonstellationen mit verschachtelten Elementen existiert, benötigt man nur die Array Funktion. Hier das Beispiel von dir:
let json1 := [{ name: "Hans", nachname: "Meier", alter: 22 }]; let json2 := [{ name: "Fritz", nachname: "Müller", alter: 33 }]; let myResult := array(json1, json2); debugValueInfo(myResult)ergibt dann:
any([{"name":"Hans","nachname":"Meier","alter":22},{"name":"Fritz","nachname":"Müller","alter":33}])Wenn man allerdings das obere geschachtelte Element benötigt, dann wäre es etwas komplexer, je nach Ursprung.
Grüße Philipp -
Hallo Phillip,
erstmal bestend Dank für die Info. Das Beispiel wie von dir geschrieben fnktioniert beir mir auch. In Wirklichkeit kommen die JSON-Daten natürlich aus einem Formelfeld. Dahinter steckt eine Funktion, die zum Abschluss das Objekt mit parseJSON zusammensetzt.
Jetzt habe ich mal probiert die Ergebisse aus den Formelfeldern per Copy/paste in die beiden Variablen einzutragen - dann funktioniert es.
Nehme ich die Formelfelder jedoch als Variableninhalt:
let json1 := 'Zahlungsdaten Hauptvertrag' let json2 := 'Zahlungsdaten Vertragsänderung 1' let myResult := array(json1, json2); myResultgibt es direkt einen Ninox-Fehler: "Die Funktion ist nicht definiert: array(any,any). Ohne Fehler funktioniert zwar:
let json1 := 'Zahlungsdaten Hauptvertrag' let json2 := 'Zahlungsdaten Vertragsänderung 1' let myResult := array([json1], [json2]); myResultdann aber mit dem bekannten Verhalten, dass das Objekt am Ende so aussieht: [[json1],[json2]].
Content aside
- vor 3 StundenZuletzt aktiv
- 3Antworten
- 17Ansichten
-
2
Folge bereits
