WSO2 CEP: обрабатывать сложные входные объекты JSON

В настоящее время я пытаюсь выяснить, как я мог бы обрабатывать ввод сложных данных в WSO2 CEP. Давайте представим, что у меня есть входные данные о событиях, похожие на приведенные ниже:

{
    "item_id":456,
    "user_id":42,
    "documents":[
            {
                "type":"word",
                "name":"ordre de mission"
            },
            {
                "type":"excel",
                "name":"horaires"
            },
            {
                "type":"pdf",
                "name":"facture"
            }
        ]
}

В идеальном случае я хотел бы, чтобы это было разбито на 3 события, как в приведенном ниже массиве:

[
    {
        "item_id":456,
        "user_id":42,
        "type":"word",
        "name":"ordre de mission"
    },
    {
        "item_id":456,
        "user_id":42,
        "type":"excel",
        "name":"horaires"
    },
    {
        "item_id":456,
        "user_id":42,
        "type":"pdf",
        "name":"facture"
    }
]

Я просто не могу понять, как получить что-то подобное... Я думал о повторном введении "documents" массив как отдельное событие, поэтому CEP разделит массив на 3 элемента потока. Но даже если бы я мог это сделать, item_id и user_id были бы потеряны в процессе... Пока что единственное, что я получаю, это то, что поле документов превратилось в сериализованную строку в моих потоках, поэтому, кажется, бесполезно извлекать фактические данные, содержащиеся в нем...

Пример, который я показываю здесь, довольно прост по сравнению с другими вещами, которыми мне придется управлять, с инкапсулированными объектами и массивом в нескольких слоях. Поэтому, если бы кто-то мог указать мне общее руководство о том, как обращаться с массивами и объектами, когда они не являются корнем данных события или даже не накладываются друг на друга, это действительно помогло бы мне!

2 ответа

Если мы рассмотрим вещи более общим образом, мне интересно, как обрабатывать данные Json, поскольку нет ни типа объекта, ни массивов в атрибутах потока...

Может быть, моя проблема здесь действительно шире, чем может показаться в моем вопросе...

Дело в том, что я просто не понимаю, как правильно обрабатывать сложные входные данные JSON... Я не могу найти ничего об этом в Документации WSO2 или где-либо еще...

Пожалуйста, дайте мне знать, если я ошибаюсь, но, как мне кажется, если бы мне пришлось обрабатывать входные данные JSON, подобные приведенным ниже, это было бы очень сложно или даже невозможно без серьезных перехватов и уродливых обходных путей...

{"reference": "tiers1", "emailRecipient": {"to": ["john.paeuudey@domain.com"], "carbonCopy": [], "blindCarbonCopy": []}}

В примере выше, как я могу хранить в своих потоках содержимое массивов "to" и "carbonCopy", например? Если я использую строковые атрибуты, то массивы сериализуются в атрибутах. Это практически полезно, но при написании этих атрибутов в издателе, который рассматривается как строки, CEP добавляет вокруг них некоторые кавычки, если, например, указан JSON. И это только один из аспектов многих проблем...

Итак, мой вопрос, в конце концов, WEP2 CEP даже предназначен для управления такими сложными данными JSON? Потому что я действительно думаю, что это не...

Вы можете использовать расширение карты Сиддхи для извлечения этих дочерних элементов [1]. В плане выполнения вы можете использовать функцию map:createFromJSON(documents) (в соответствии с вашим потоком соответствующий атрибут - документы) расширения карты для создания карты. Затем извлеките соответствующие значения из их ключей.(Word, Excel и т. Д.) Пожалуйста, обратитесь [1]. Если вы хотите вывести три события из потока выше, вам нужно написать собственный StreamProcessor. Пожалуйста, обратитесь [2].

[1] https://docs.wso2.com/display/CEP410/Siddhi+Extensions

[2] https://docs.wso2.com/display/CEP410/Writing+a+Custom+Stream+Processor+Extension

Другие вопросы по тегам