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