Moin,
eine noch experimentelle LAMBDA-Funktion, die einfach strukturierte JSON-Daten mit einer Ebene direkt per URL in einen Bereich umwandelt.
Klar, man könnte PowerQuery verwenden, ich hätte aber gerne eine Formel. Ein Beispielaufruf wäre dann zum Beispiel:
JSON.TORANGE(WEBDIENST("https://jsonplaceholder.typicode.com/posts"))
Wie zu sehen, nutzt JSON.TORANGE intern weitere LAMBDAs. Es fehlen z.B. noch eine Erkennung für Datumsangaben oder eine vollständige
Erkennung von Zahlenformaten, also z.B. in exponentieller Schreibweise. Und testen von diversen JSON-Api, die den Regeln folgen.
Wenn da jemand Ideen hat ...
Gruß
eine noch experimentelle LAMBDA-Funktion, die einfach strukturierte JSON-Daten mit einer Ebene direkt per URL in einen Bereich umwandelt.
Klar, man könnte PowerQuery verwenden, ich hätte aber gerne eine Formel. Ein Beispielaufruf wäre dann zum Beispiel:
JSON.TORANGE(WEBDIENST("https://jsonplaceholder.typicode.com/posts"))
Code:
=LAMBDA(Data;LET(
fnSplit;LAMBDA(T;S;LET(U;TEIL(S&T&S;SEQUENZ(LÄNGE(S&T&S));LÄNGE(S));N;SEQUENZ(ZEILEN(U));
V;WENN(U=S;WENN(N>1;N-LÄNGE(S);N);0);F;FILTER(V;V>0);X;SEQUENZ(ZEILEN(F)-1);
TEIL(T;INDEX(F;X;1)+WENN(X>1;LÄNGE(S);0);INDEX(F;X+1;1)-INDEX(F;X;1)-WENN(X>1;LÄNGE(S);0))));
fnProperty;LAMBDA(T;S;TEIL(T;1+FINDEN(ZEICHEN(1);WECHSELN(T;S;ZEICHEN(1);LÄNGE(T)-LÄNGE(WECHSELN(T;S;""))));LÄNGE(T)));
fnValue;LAMBDA(T;S;LET(U;WECHSELN(WECHSELN(T;", "&ZEICHEN(34);","&ZEICHEN(34));","&ZEICHEN(34);ZEICHEN(1)&ZEICHEN(34))&ZEICHEN(1);
V;ZEICHEN(34)&S&ZEICHEN(34)&":";N;WENNFEHLER(LÄNGE(V)+FINDEN(V;U;1);0);
P;WENNFEHLER(FINDEN(ZEICHEN(1);U;N+1);0);GLÄTTEN(WENN(N*P>0;TEIL(U;N;P-N);""))));
fnType;LAMBDA(T;LET(U;T;V;WENN((LINKS(U;1)=ZEICHEN(34))*(RECHTS(U;1)=ZEICHEN(34))>0;2;
WENN(ISTZAHL(--U);3;WENN((KLEIN(U)="false")+(KLEIN(U)="true")>0;4;1)));
WAHL(V;U;WECHSELN(WECHSELN(TEIL(U;2;LÄNGE(U)-2);ZEICHEN(2);ZEICHEN(34));"\n";
ZEICHEN(10));--WECHSELN(U;".";""& TEIL(1/2;2;1));WENN(U<>"true";FALSCH;WAHR))));
S;WECHSELN(WECHSELN(WECHSELN(GLÄTTEN(SÄUBERN(Data));"}, {";"},{");"},{";"}"&ZEICHEN(1)&"{");"\"&ZEICHEN(34); ZEICHEN(2));
A;fnSplit(GLÄTTEN(WENN(LINKS(S;1)="[";TEIL(S;2;LÄNGE(S)-2);S));ZEICHEN(1));
H;LET(U;fnSplit(INDEX(A;1;1);ZEICHEN(34)&":");fnProperty(INDEX(U;SEQUENZ(1;ZEILEN(U)-1);1);ZEICHEN(34)));
X;SEQUENZ(1+ZEILEN(A));
Y;SEQUENZ(1;SPALTEN(H));
WENN(X>1;fnType(fnValue(GLÄTTEN(TEIL(INDEX(A;X-1;1);2;LÄNGE(INDEX(A;X-1;1))-2));INDEX(H;1;Y)));INDEX(H;1;Y))))
Wie zu sehen, nutzt JSON.TORANGE intern weitere LAMBDAs. Es fehlen z.B. noch eine Erkennung für Datumsangaben oder eine vollständige
Erkennung von Zahlenformaten, also z.B. in exponentieller Schreibweise. Und testen von diversen JSON-Api, die den Regeln folgen.
Wenn da jemand Ideen hat ...
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner