In folgendem Beispiel zeige ich dir wie du ein JSON mit Leerstellen auslesen kannst. Zudem noch wie ein Array gelesen wird was keine weiteren "Attribute" hat.
In der Automic Hilfe gibt es dieses Beispiel nicht und nach einer Lösung musste ich lange suchen.
Das Ziel, von mir, war eine Störungsmeldung per JSON zu erzeugen.
Dabei kann mir der Absender Informationen über den Inhalt in der JSON liefern.
Unter anderem waren für sein Mail-Body Informationen dabei welche "Leerstellen" enthalten.
Dafür musste die Abfrage angepasst werden. Auch das kommt nicht aus der Automic Hilfe hervor.
Das Ergebnis von unterem Skript sieht dann, später als E-Mail, so aus:
- U00020408 &JSON_HEADER_EMPFAENGER#: username@firma.com;name1@firma.com;user12@firma.com;name1@firma.com
- U00020408 &JSON_HEADER_BETREFF#: Fehler in Job XYZ
- U00020408 &JSON_BODY#: Hallo zusammen,
Folgende Stoerung wird gemeldet:
Stoerungsart : ::STOERUNGSART::
Dauer der Stoerung : Unbekannt
Bearbeitungsstatus : Klaerung mit Datenlieferant
Betroffene Services: Alle Direktabfragen
Der &JSON_BODY# nimmt alles komplett mit.
per
:RSET &JSON_BODYBEST_DAUER_STOERUNG# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Bodybestandteile']['Dauer der Stoerung']")
kann er aber diese eine Information auch gezielt abfragen. Das dann sogar mit den Leerstellen.
Bei dem Array mit den E-Mail Adressen unterscheidet sich, wie gesagt, die Hilfe von Automic zu meinem praktischen Beispiel:
"Empfaenger":["user12@firma.com","name1@firma.com","user01@firma.com","name1@firma.com"]
kann nur so ausgelesen werden:
:DEFINE &EMAILS#,string, 20
:SET &HND3# = JSON_TO_PROCESS(&JSON_ZEILE_#,"$['Header']['Empfaenger'][*]" )
:PROCESS &HND3#
: SET &MAIL# = GET_PROCESS_LINE(&HND3#)
: SET &i# = get_process_info(&HND3#,INDEX)
: SET &EMAILS#[&i#] = &MAIL#
: P &MAIL#
:ENDPROCESS
:CLOSE_PROCESS &HND3#
Wichtig ist dabei das die Parameter, also jede einzelne E-Mail Adresse, mit dem [*] abgegriffen werden kann bzw. muss
Hoffe das es mal jemandem helfen wird :)
Gruß
Thomas
PS: das ganze JOBS Skript:
:SET &JSON_ZEILE_# = '{"Header":{"Empfaenger":["user12@firma.com","name1@firma.com","user01@firma.com","name1@firma.com"],"Betreff":"Fehler in Job XYZ"},"Body":"Hallo zusammen,\nFolgende Stoerung wird gemeldet:\nStoerungsart : ::STOERUNGSART::\nDauer der Stoerung : Unbekannt\nBearbeitungsstatus : Klaerung mit Datenlieferant\nBetroffene Services: Alle Direktabfragen\n","Bodybestandteile":{"Stoerungsart":"Schnittstellenfiles unvollstaendig","Dauer der Stoerung":"Unbekannt","Bearbeitungsstatus":"Klaerung mit Datenlieferant","Betroffene Services":"TEST"}}'
:SET &JSON_HEADER_EMPFAENGER# = ""
:SET &HND3# = JSON_TO_PROCESS(&JSON_ZEILE_#,"$['Header']['Empfaenger'][*]" )
:PROCESS &HND3#
: SET &MAIL# = GET_PROCESS_LINE(&HND3#)
: SET &MAIL# = "&MAIL#;"
: PRINT &MAIL#
: SET &JSON_HEADER_EMPFAENGER# = "&MAIL#&JSON_HEADER_EMPFAENGER#"
:ENDPROCESS
:CLOSE_PROCESS &HND3#
:SET &JSON_HEADER_BETREFF# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Header']['Betreff']")
:PRINT "&&JSON_HEADER_BETREFF#: &JSON_HEADER_BETREFF#"
:SET &JSON_BODY# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Body']")
:PRINT "&&JSON_BODY#: &JSON_BODY#"
:SET &JSON_BODYBEST_STOERUNGSART# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Bodybestandteile']['Stoerungsart']")
:PRINT "&&JSON_BODYBEST_STOERUNGSART#: &JSON_BODYBEST_STOERUNGSART#"
:RSET &JSON_BODYBEST_DAUER_STOERUNG# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Bodybestandteile']['Dauer der Stoerung']")
:PRINT "&&JSON_BODYBEST_DAUER_STOERUNG#: &JSON_BODYBEST_DAUER_STOERUNG#"
:SET &JSON_BODYBEST_BEARBEITSTATUS# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Bodybestandteile']['Bearbeitungsstatus']")
:PRINT "&&JSON_BODYBEST_BEARBEITSTATUS#: &JSON_BODYBEST_BEARBEITSTATUS#"
:SET &JSON_BODYBEST_BETR_SERVICE# = JSON_GET_VALUE(&JSON_ZEILE_#,"$['Bodybestandteile']['Betroffene Services']")
:PRINT "&&JSON_BODYBEST_BETR_SERVICE#: &JSON_BODYBEST_BETR_SERVICE#"
:PRINT "E-Mail senden an: &JSON_HEADER_EMPFAENGER#"
!!!!!!!!!!!!!!!!!!!!!!!:RSET &RET_MAIL# = SEND_MAIL("&JSON_HEADER_EMPFAENGER#",,&JSON_HEADER_BETREFF#,&JSON_BODY#)
:PRINT "******************************************************************"