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 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:
AutoIt
#include <JSON.au3>
Global $s_String = '[{"id":"4434156","url":"https://legacy.sky.com/v2/schedules/4434156","title":"468_CORE_1_R.4 Schedule","time_zone":"London","start_at":"2017/08/10 19:00:00 +0100","end_at":null,"notify_user":false,"delete_at_end":false,"executions":[],"recurring_days":[],"actions":[{"type":"run","offset":0}],"next_action_name":"run","next_action_time":"2017/08/10 14:00:00 -0400","user":{"id":"9604","url":"https://legacy.sky.com/v2/users/9604","login_name":"robin@ltree.com","first_name":"Robin","last_name":"John","email":"robin@ltree.com","role":"admin","deleted":false},"region":"EMEA","can_edit":true,"vm_ids":null,"configuration_id":"19019196","configuration_url":"https://legacy.sky.com/v2/configurations/19019196","configuration_name":"468_CORE_1_R.4"},{"id":"4444568","url":"https://legacy.sky.com/v2/schedules/4444568","title":"468_CORE_1_R.4 Schedule","time_zone":"London","start_at":"2017/08/11 12:00:00 +0100","end_at":null,"notify_user":false,"delete_at_end":false,"executions":[],"recurring_days":[],"actions":[{"type":"suspend","offset":0}],"next_action_name":"suspend","next_action_time":"2017/08/11 07:00:00 -0400","user":{"id":"9604","url":"https://legacy.sky.com/v2/users/9604","login_name":"robin@ltree.com","first_name":"Robin","last_name":"John","email":"robin@ltree.com","role":"admin","deleted":false},"region":"EMEA","can_edit":true,"vm_ids":null,"configuration_id":"19019196","configuration_url":"https://legacy.sky.com/v2/configurations/19019196","configuration_name":"468_CORE_1_R.4"}]'
; ================= JSON-String in AutoIt-Datenstrukturen parsen ==============
$o_Object = _JSON_Parse($s_String)
; ================= Abfragen direkt per AutoIt ================================
$s_Type = ((($o_Object[1])["actions"])[0])["type"]
ConsoleWrite("type: " & $s_Type & @CRLF)
; ================= Abfragen per JSON_Get (sicherer) ================================
$s_Type = _JSON_Get($o_Object, "[1].actions[0].type")
ConsoleWrite("type: " & $s_Type & @CRLF)
; ================= AutoIt-Datenstrukturen in JSON-String konvertieren ==============
ConsoleWrite(_JSON_Generate($o_Object) & @CRLF & @CRLF)
; kompaktes JSON:
ConsoleWrite(_JSON_GenerateCompact($o_Object) & @CRLF & @CRLF)
Alles anzeigen
Man kann mit der UDF auch verschachtelte AutoIt-Strukturen (welche z.B. von _JSON_Parse() erzeugt wurden) erzeugen und verändern:
AutoIt
#include <JSON.au3>
Global $mMap ; Zielvariable für die zu schaffende Datenstruktur
; Erzeuge eine Datenstruktur um die Angestellten von verschiedenen Firmen an ihren spezifischen Firmenstandorten zu verwalten:
_JSON_addChangeDelete($mMap, "Meine Firma.Standorte[1].Mitarbeiter[0]", "Hagen Rether")
_JSON_addChangeDelete($mMap, "Meine Firma.Standorte[1].Mitarbeiter[1]", "Dieter Nuhr")
_JSON_addChangeDelete($mMap, "Meine Firma.Standorte[3].Mitarbeiter[0]", "Lisa Eckhardt")
; Ändere einen Wert - hier z.B. den Mitarbeiter "Hagen Rether" durch einen anderen ersetzen:
_JSON_addChangeDelete($mMap, "Meine Firma.Standorte[1].Mitarbeiter[0]", "Volker Pispers")
; Lösche den 2. Mitarbeiter am 2. Firmenstandort ("Dieter Nuhr")
_JSON_addChangeDelete($mMap, "Meine Firma.Standorte[1].Mitarbeiter[1]")
; Die Datenstruktur als JSON-String ausgeben:
ConsoleWrite(_JSON_Generate($mMap) & @CRLF & @CRLF)
Alles anzeigen
>>Download und Quellcode auf GitHub<<
Changelog:
2017/08/21 |
|
2017/08/22 |
|
2017/08/27 |
|
2017/09/04 |
|
2017/10/10 |
|
2017/10/11 |
|
2017/10/16 |
|
2017/10/31 |
|
2018/01/11 |
|
2019/03/03 |
|
2020/05/21 |
|
2020/10/21 |
|
2020/12/29 |
|
2021/01/07 |
|
2021/02/09 |
|
2021/10/25 |
|
2022/10/19 |
|
2023/01/03 |
|
2023/01/16 |
|
2023/05/23 |
|