ESQLでJSON子ノードデータにアクセスするにはどうすればよいですか?
Aug 23 2020
私のためにこれを見てくれてありがとう。
IBM ACE V11ソフトウェアで作業していますが、サービスでJSONメッセージを受信します。
このJSONメッセージをESQLを介してSOAPリクエストにマップする必要があります。
以下のサンプルメッセージを参照してください。
着信JSONメッセージ:
"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"
}
ESQLでは、これまでに次のことがあります。
ジャーナルの名前の場合:
SET OutputRoot.SOAP.Body.ns:submitJournal.ns:journalName = InputRoot.JSON.Data.journals.journalName;
ジャーナルの年:
SET OutputRoot.SOAP.Body.ns:submitJournal.ns:journalYear = InputRoot.JSON.Data.journals.journalYear;
Journal's Authorの場合、問題があります。問題は、0〜3人以上の作成者がいる可能性があることです。この場合、2人の作成者がいます。
最初に作成者が存在するかどうかを確認し、存在する場合は何人存在するかを確認してから、各作成者の詳細をSOAPに割り当てる方法を教えてください。(これはすべてESQLで)。
ESQLでは、これまでのところこれがあります。しかし、「n」の値を取得する方法がわかりません。(nは著者の数を表します)。
SET OutputRoot.SOAP.Body.ns:submitJournal.ns:journalAuthorValues[n].ns16:AuthorName = InputRoot.JSON.journals.journalAuthor[n].name;
ありとあらゆる助けに大いに感謝します。
回答
kimbert Aug 24 2020 at 08:00
Journal's Authorの場合、問題があります。問題は、0〜3人以上の作成者がいる可能性があることです。この場合、2人の作成者がいます。
著者の配列を反復処理する必要があり、著者の数を数える必要があると想定しています。しかし、あなたはそうする必要はありません。これは問題なく動作するはずです(テストされておらず、構文エラーが含まれている可能性があります)
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
ESQLでカウントされたループを使用しないようにする必要があります。FORステートメントまたはSELECTステートメントは、ほとんどの場合、より単純で優れています。