如何在 ESQL 中访问 JSON 个子节点数据?

How do I access JSON child node data in ESQL?

非常感谢你帮我看这个。

我在 IBM ACE V11 软件中工作,在我的服务中,我收到一条 JSON 消息。

我需要通过 ESQL 将此 JSON 消息映射到 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;  

对于期刊的作者,我有一个问题。问题是可以有 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; 

非常感谢任何帮助。

For Journal's Author, I have a problem. The problem is that there can be 0 to 3 or more authors. In this case, there are 2 authors.

您需要遍历作者数组,并且假设您需要计算 作者的数量。但你不需要。这应该可以正常工作(未经测试,可能包含语法错误)

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 语句几乎总是更简单更好。