Automic Workload Automation

 View Only

JSON Array mit Leerstellen auslesen

  • 1.  JSON Array mit Leerstellen auslesen

    Posted Oct 28, 2021 07:58 AM
    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 "******************************************************************"