Statement zur DSGVO im Forum

Alles zur DSGVo und zur Umsetzung im Forum hier: Statement zur DSGVO
  • Aufgrund einer Shoutbox-Diskussion und meiner Unzufriedenheit mit bisherigen JSON-UDFs habe ich mich mal rangesetzt und meine Vorstellungen wie eine solche auszusehen hat umgesetzt.
    Die bisherigen UDFs sind meiner Meinung nach entweder unnötig umständlich, haben externe Abhängigkeiten oder kommen nicht mit Dictionaries klar.
    Daher folgt die UDF folgenden Prämissen:

    • Ein JSON-String wird mit einer einzigen Funktion komplett in eine native (+ Scripting.Dictionary) AutoIt-Datenstruktur zur Weiterverarbeitung konvertiert. (Funktion _JSON_Parse)
    • Andersherum kann aus beliebigen AutoIt-Datenstrukturen ein JSON-String erzeugt werden. (Funktion _JSON_Generate)
    • Abfragen können entweder direkt in den AutoIt-Variablen stattfinden oder etwas sicherer in einer sehr simplen Abfragesprache (Funktion _JSON_Get)

    Wer also ähnlich tickt wie ich findet eventuell hiermit eher seine Vorstellungen umgesetzt.


    Wie verwendet man es nun? - na dann siehe hier:

    Meine Versuche waren alle zufriedenstellend.
    Bugs sind aber logischerweise nicht auszuschließen und können gerne hier gemeldet werden.


    Changelog:

    2017/08/21
    • _JSON_Generate: Bug bei 2D-Arrays behoben
    2017/08/22
    • Ausgabe von _JSON_Generate individualisierbar
    2017/08/27
    • stabilere Stringdefinition
    • _JSON_Generate: Static string wird aufgeräumt
    • offizielle Whitespace-Definition statt \s
    2017/09/04
    • _JSON_Generate: Zahlenausgabe nun so kompakt wie möglich
    2017/10/10
    • Große Arrays werden nun schneller geparst (selbes Prinzip wie in der DynArray-UDF verwendet)
    2017/10/11
    • Bug in _JSON_Generate behoben (Escapen von Backslashes fügte ein " hinzu)
    • deutlich stabilerer Umgang mit Escape-Zeichen in Strings
    • Performance-Verbesserungen (ohne Umweg über Hilfsfunktion direkter Zugriff per StringRegExp)
    2017/10/16
    • _JSON_Generate: Rundungsfehler bei großen Zahlen behoben
    2017/10/31
    • _JSON_Parse: Unicode-Escapes werden nun konvertiert.
    2018/01/11
    • _JSON_Parse: Performanceverbesserung durch optimierte RegEx-Pattern.
    • _JSON_ParseString: bessere Performance
  • Hallo @AspirinJunkie,
    vielen Dank für deine UDF und das Beispiel :)


    Ich kann nicht behaupten, dass ich den Code auf den ersten Blick verstehe und ich habe nur dein Beispiel getestet. Allerdings sehen die Beispiele super aus und ich will das noch testen. Eine JSON UDF kann ich definitiv gebrauchen.


    Wäre es Quatsch auch direkt eine Umwandung von xDArray zu JSON und umgekehrt einzubauen?

  • Wäre es Quatsch auch direkt eine Umwandung von xDArray zu JSON und umgekehrt einzubauen?

    Wenn du damit mehrdimensionale Arrays meinst: 2D Arrays sollte die UDF bereits konvertieren (wird dann im Grunde ein Array in Array):


    Umgekehrt (Also JSON in ein 2D-Array) würde so direkt nicht gehen, da man in JSON-Syntax nicht sehen kann ob es sich um ein 2D-Array handelt oder um ein Array-In-Array.
    Es ist daher dem User überlassen die Struktur entsprechend zu interpretieren. Im Beispiel hier findest du einen Ansatz wie man dies bewerkstelligen kann.
    3D und mehr halte ich persönlich für ziemlich exotisch und würde es daher dem User überlassen diese vorher in Array-In-Array Strukturen aufzubrechen.


    Edit: Aber danke für deinen Hinweis - hab es gleich mal getestet und gleich den ersten Bug hierzu gefunden.
    Hab es oben aktualisiert - nun sollten auch 2D-Arrays gehen.

  • Gefällt mir gut :thumbup: 
    Seitdem ich angefangen hatte mich intensiver mit dem Editor Sublime Text zu beschäftigen, hatte ich auch mit JSON-Dateien zu tun, die die Basis für viele Einstellungen und PlugIns dieses Editors darstellen. Und das ist wirklich eine feine Sache. Ich hatte schon damit geliebäugelt, verstärkt JSON für meine AutoIt-Skripte zu verwenden, aber eine vernünftige Schnittstelle fehlte.
    Soweit ich das bisher sehe, könnte diese UDF die Lücke bestens ausfüllen.
    Danke @AspirinJunkie

  • Wow... finde deine UDF echt super! Die erste sinvolle JSON UDF die ich gefunden hab :thumbup:

    Jetz hätt ich nur eine Frage zur Benutzung. Folgenden String liegt mir vor:


    { "image": { "url": "https://*********", "isDefault": false } }


    wie kann ich jetzt den Wert des Parameters "url" abfragen?


    EDIT: Wie kann ich generell die Objekthierarchie händeln, heißt JSON-Objekte in JSON-Objekte und dann erst die Attribute.


    Danke schonmal, NO1 :-)

  • wie kann ich jetzt den Wert des Parameters "url" abfragen?

    AutoIt
    1. #include <JSON.au3>
    2. Global $s_String = '{ "image": { "url": "https://*********", "isDefault": false } }'
    3. Global $o_Object = _JSON_Parse($s_String)
    4. Global $s_URL = _JSON_Get($o_Object, "image.url")
    5. MsgBox(0,"URL", $s_URL)

    EDIT: Wie kann ich generell die Objekthierarchie händeln, heißt JSON-Objekte in JSON-Objekte und dann erst die Attribute.

    Wie bitte? - das habe ich nicht verstanden.

  • Vielen Dank für deine schnelle Hilfe! Funktioniert ja super :)! :thumbup:


    Wie bitte? - das habe ich nicht verstanden.


    Ja hast meine Frage dadurch schon beantwortet. Ein JSON-Objekt ist immer der Inhalt zwischen den geschweiften Klammern...

    Wenn ich hier jetzt zum Beispiel "location" auslesen will, wie mach ich das dann? Beginnen die Indicies auch bei 0?

    { "error": { "errors": [ { "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } }


    Tut mir leid, dass ich soviel nachfrag, aber die UDF begeistert mich grad voll... ^^

  • Wenn ich hier jetzt zum Beispiel "location" auslesen will, wie mach ich das dann?

    AutoIt
    1. #include <JSON.au3>
    2. Global $s_String = '{ "error": { "errors": [ { "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } }'
    3. Global $o_Object = _JSON_Parse($s_String)
    4. Global $s_location = _JSON_Get($o_Object, "error.errors[0].location")
    5. MsgBox(0,"Location", $s_location)


    Ein JSON-Objekt ist immer der Inhalt zwischen den geschweiften Klammern...

    Wenn ich hier jetzt zum Beispiel "location" auslesen will, wie mach ich das dann? Beginnen die Indicies auch bei 0?

    Deine Frage drehte sich halt nicht um Objekte sondern um Arrays und deren Indizierung.
    Daher war mir nicht klar was du meintest.

  • Also vielen Dank, funktionier wunderbar.

    Deine Frage drehte sich halt nicht um Objekte sondern um Arrays und deren Indizierung.
    Daher war mir nicht klar was du meintest.

    Zu dem Zeitpunkt gings mir noch nicht um die Arrays, aber danke, dass du mir die Frage auch gleich beantwortet hast ^^.

    Letzte Frage: Kann ich hier zum Beispiel überprüfen, ob "error" überhaupt existiert?

    '{ "error": { "errors": [ { "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } }'

  • Versuch doch mit Get die Daten zu lesen und schau dann inden Rückgabewert + @error.

  • Letzte Frage: Kann ich hier zum Beispiel überprüfen, ob "error" überhaupt existiert?

    Ja - indem du @error der Funktion entsprechend auswertest:


    Edit: tja - alpines war schneller

  • Moin zusammen

    Ich habe eine Frage bezüglich der Lizenzsierung der UDF

    Ich bin gerade dabei mir ein Programm zu schreiben welches nach einer Windowsinstallation weitere Programme installiert und habe dafür deine JSON UDF verwendet um die Konfiguration zu laden

    Jetzt überlege ich meinen Quellcode ggf freizugeben für den Privaten Gebrauch und einen selbstverfassten Lizenztext hinzuzufügen und weiss nicht wie ich das wegen der Benutzung der Fremdbibliothek machen soll

    Desshalb die frage unter welche Lizenz die UDF selber steht ;-)


    MFG: Lutz

  • Hallo AspirinJunkie !


    Die WTFPL-Lizenz (= Do What The Fuck You Want To Public License) klingt natürlich schon allein vom Namen her verlockend ;). Sie bringt genau das 'rüber, was die meisten zum Thema 'Lizenzen' denken. Allerdings hat sie kleine Schwächen.

    siehe : https://de.wikipedia.org/wiki/WTFPL

    Auszug :

    ... Um ein Werk ohne Einschränkungen als Public Domain freizugeben, wird die CC0 empfohlen da diese speziell für Kompatibilität mit den verschiedenen internationalen Rechtssystem geschrieben wurde (im Gegensatz zur WTFPL, deren Rechtsverbindlichkeit im Klagefall unklar ist).


    Ich würde daher auch für eine Creative Commons Lizenz plädieren, z.B. die CC0 !

    siehe : https://de.wikipedia.org/wiki/Creative_Commons

    Auszug :

    CC0 (gesprochen cc zero) vereinigt in sich zwei rechtliche Werkzeuge, eine Verzichtserklärung und eine bedingungslose Lizenz. Die bedingungslose Lizenz fungiert als Rückfallposition (englisch „fallback license“) für den Fall, dass die vorrangige Verzichtserklärung nach dem jeweils geltenden Recht nicht voll wirksam ist. Mit der Verzichtserklärung wird der Verzicht auf sämtliche Schutzrechte erklärt. Dadurch soll das jeweilige Werk durch den Urheber bzw. Rechteinhaber aktiv in die Gemeinfreiheit überführt werden (englisch „voluntary public domain“).[36] Wenn diese Überführung rechtlich nicht möglich ist – wie beispielsweise in Deutschland oder Österreich – stellt die in CC0 enthaltene „Fallback License“ gewissermaßen eine Creative-Commons-Lizenz ohne die sonst üblichen Lizenzbedingungen (BY, SA, ND, NC, siehe oben) dar.
    Falls Du eine CC-Lizenz mit Namensnennung bevorzugst, dann ->

    CC-BY 3.0 DE



    Falls Dich das Ganze nicht interessiert, kannst Du selbstverständlich bei der WTFPL-Lizenz bleiben. Große Rechtstreite sind im vorliegenden Fall ja eher nicht zu erwarten ;).


    Gruß Musashi

    "Die Definition von Wahnsinn ist, immer wieder das Gleiche zu tun und andere Ergebnisse zu erwarten." - Albert Einstein

  • Falls Dich das Ganze nicht interessiert, kannst Du selbstverständlich bei der WTFPL-Lizenz bleiben. Große Rechtstreite sind im vorliegenden Fall ja eher nicht zu erwarten ;).

    Passend zusammengefasst.

    Die wtfpl ist für mich gerade so vertretbar für eine Thematik mit der ich mich in meinem Hobbybereich eigentlich überhaupt gar nicht beschäftigen will. Die CC scheidet daher für mich auch schon aus da ich dort ja meine wünsche erst zusammenklicken muss. Jeder klick für diese Thematik ist für mich hierzu verschwendet wenn es wie hier mein hobby betrifft.

  • Ich sehe schon das ich ein heikles Thema angesprochen habe

    Meine Überlegung war auch eigentlich nur das wenn ich etwas kostenlos Veröffentliche nicht der nächste hingeht und es weiterverkauft

    Das ist der Grund warum ich mich damit auseinandersetzen wollte n Lizenztext beizugeben

  • Passend zusammengefasst.

    Der Beitrag war auch nur als Anregung für Dich gedacht.

    Als Urheber musst Du im Grunde überhaupt keine Lizenz etc. angeben. Das Problem läge bei den Nutzern deiner UDF, da sie dann nicht wissen was sie machen dürfen. Eine Lizenzierung unter CC0 wäre auch nicht aufwändig - es reicht die entsprechende Angabe. Diese Entscheidung hast Du aber bereits getroffen und da will ich nicht weiter nerven :).


    Ich sehe schon, dass ich ein heikles Thema angesprochen habe.

    Meine Überlegung war auch eigentlich nur das wenn ich etwas kostenlos veröffentliche nicht der nächste hingeht und es weiterverkauft.

    Das ist der Grund warum ich mich damit auseinandersetzen wollte einen Lizenztext beizugeben

    Hallo Lutz Ifer !

    Heikel ist das Thema eigentlich nicht, nur wenig erbaulich ^^.

    Bei Dir liegt die Sache anders, da Du ja gewisse Einschränkungen machen willst. Für Dich wäre die WTFPL-Lizenz nicht geeignet. Zudem sind die CC-Lizenzen allgemein etabliert.


    Schaue Dir mal den Link für die CC Lizenztypen an :  https://de.wikipedia.org/wiki/Creative_Commons 


    Beispiel : CC-BY-NC-SA 3.0 DE


    Falls Du noch weitere Fragen hast, nur zu !


    Gruß Musashi

    "Die Definition von Wahnsinn ist, immer wieder das Gleiche zu tun und andere Ergebnisse zu erwarten." - Albert Einstein