Come si accede ai dati del nodo figlio JSON in ESQL?

Aug 23 2020

Molte grazie per aver guardato questo per me.

Sto lavorando nel software IBM ACE V11 e nel mio servizio ricevo un messaggio JSON.

Ho bisogno di mappare questo messaggio JSON a una richiesta SOAP tramite ESQL.

Vedere il messaggio di esempio di seguito:

Messaggio JSON in arrivo:

   "journals": [
                    {
                            "journalName": "Plant Species in London",
                            "journalYear": "2016",
                            "journalAuthor": [
                                    {
                                            "name": "Julian Bose",
                                            "subject": "botany"
                                    }
                                    {
                                            "name": "Samantha Adams",
                                            "subject": "biology"
                                    }, 
                            ],
                            "samplePolling": {
                                    "pollingInterval": 120,
                                    "totalAttempts": 10
                            }
                    },
              
            ],
            "supervisorName": "James Smith"
    }

In ESQL ho finora:

Per il nome del giornale:

SET OutputRoot.SOAP.Body.ns:submitJournal.ns:journalName = InputRoot.JSON.Data.journals.journalName;  

Per l'anno della rivista:

SET OutputRoot.SOAP.Body.ns:submitJournal.ns:journalYear = InputRoot.JSON.Data.journals.journalYear;  

Per l'autore del giornale, ho un problema. Il problema è che possono esserci da 0 a 3 o più autori. In questo caso, ci sono 2 autori.

Come controllo prima se sono presenti autori e, in caso affermativo, quanti ce ne sono e poi come assegnare i dettagli di ogni autore a SOAP. (Tutto questo in ESQL).

In ESQL ho questo finora. Ma non so come ottenere il valore "n". (n rappresenta il numero di autori).

SET OutputRoot.SOAP.Body.ns:submitJournal.ns:journalAuthorValues[n].ns16:AuthorName = InputRoot.JSON.journals.journalAuthor[n].name; 

Qualsiasi aiuto è molto apprezzato.

Risposte

kimbert Aug 24 2020 at 08:00

Per l'autore del giornale, ho un problema. Il problema è che possono esserci da 0 a 3 o più autori. In questo caso, ci sono 2 autori.

È necessario iterare sull'array di autori e si presume che sia necessario contare il numero di autori. Ma non è necessario. Questo dovrebbe funzionare bene (non testato, potrebbe contenere errori di sintassi)

FOR refAuthor AS InputRoot.JSON.Data.journals.(JSON.Array)journalAuthor[] DO
    CREATE LASTCHILD OF OutputRoot.SOAP.Body.ns:submitJournal.ns:journalAuthorValues 
       TYPE NAMEVALUE
       IDENTITY ns16:AuthorName
       VALUE FIELDVALUE(refAuthor);
END FOR

Dovresti cercare di evitare di utilizzare i loop conteggiati in ESQL. Un'istruzione FOR o un'istruzione SELECT è quasi sempre più semplice e migliore.