Извлечение json из текста с помощью SIddhi Execution Json API

Я пытаюсь извлечь действительный json из текста с помощью Siddhi json Execution API. Я загрузил siddhi-execution-json-1.1.1.jar из магазина wso2 и следую примеру, упомянутому в документации. Но тот же синтаксис выше не выдает ошибку «Синтаксическая ошибка в SiddhiiQl, несоответствующий ввод 'input', ожидающий {',', GROUP, ORDER, LIMIT ....}». Ниже мой синаткс:

@info(name='query_name') 
from transact#window.length(1)
select json:group("json",true) as groupedJSONArray
input transact2;

Я использую приведенный ниже текст из потока транзакций:

data: "" {
    "_id": {
        "$oid": "fr4wfwe4"
    },
    "code": "fesfsce",
    "name": "NAME1",
    "desc": "DECRIPTION",
    "transRefId": "FESFCSEFCS",
    "amount": 1000,
    "currency": "USD",
    "sender": {
        "id": "FRESGVSVDVEFE2333",
        "name": "rose",
        "phone": "123456789"
    },
    "message": "",
    "lockedBy": {},
    "activatedBy": {},
    "statusChangedAt": "",
    "linkBankTrans": null,
    "devGrp": 0,
    "requestId": "",
    "codeStatus": null,
    "codeTransRefId": null,
    "extOriginTransId": null
}
""

Для справки, я генерирую поток транзакций с помощью следующего запроса:

@info(name = 'clean payload with replaceall')
from transactionstream1 
select str:replaceAll(payload,"\\","") as data
insert into transact;

Я хочу извлечь действительный json внутри данных: "" в потоковом процессоре WSO2. Есть ли какое-то другое расширение, которое я должен использовать, или в способе выполнения есть какая-то ошибка? Мне нужен этот запрос выше: @info (name = 'query_name'), чтобы работать, чтобы получить json из приведенного выше текста.


person Rahul Anand    schedule 12.12.2019    source источник


Ответы (1)


Здесь следует отметить несколько моментов,

  1. Однако вы пытаетесь использовать функцию json: group () из API docs, это не поддерживается для v1.1.1, это причина синтаксической ошибки. json: group () - это агрегатная функция, скажем, я хочу объединить элементы JSON в один json каждые 3 события, в этом случае можно использовать group (), но не в вашем случае. json: group () доступен только в версиях 2.x.x функции siddhi-execution-json, которая НЕ совместима с потоковым процессором WSO2. Он совместим с siddhi runner (предложение с полностью открытым исходным кодом, которое направлено на то, чтобы изначально использовать облачные возможности для siddhi lib). Следующее поколение wso2 sp.

  2. Из вашего предыдущего вопроса казалось, что вы извлекли строку json внутри элемента payload. Однако это строковый тип, и он нужен вам как объект JSON для управления с помощью siddhi-execution-json, это ваша причина убрать обратную косую черту с помощью запроса clean payload with replace all. Однако вы можете добиться этого, используя json: toObject

    from transactionstream1
    select json:toObject(payload) as payloadJson  
    insert into transact;
    

    Для этого мы будем использовать тип данных Siddhi object, который может содержать любой объект для передачи между запросами или управления с помощью расширений. Также json: toObject () - это тип расширения функции который используется для преобразования атрибутов в одном событии.

  3. После преобразования строки в объект json вы можете использовать функции getString () / getFloat / getBool () для извлечения значений из объекта json.

    from transact 
    select json:getString(payloadJson, '$.code') as code, 
    json:getString(payloadJson, '$.name') as name
    insert into LogStream;
    
  4. Кстати, эти изменения MongoDB извлекаются через Debezium?

person Niveathika    schedule 12.12.2019
comment
Да, изменения MongoDB получены через Debezium - person Rahul Anand; 12.12.2019
comment
Еще одна проблема, с которой я столкнулся, заключается в том, что когда я перезапускаю свой wso2sp, я начинаю получать ошибку ниже с регулярным выражением, чего не было раньше: при преобразовании текстового сообщения возникло исключение: java.lajava.lang.StackOverflowError - person Rahul Anand; 12.12.2019
comment
У Siddhi есть источник CDC, однако на данный момент он не поддерживает MongoDB. Вы можете внести свой вклад в siddhi-io-cdc, тогда вы сразу сможете получить полезную нагрузку. github.com/siddhi-io/siddhi-io-cdc/blob/siddhi-4.xx/component/ - это место для добавления конфигураций. - person Niveathika; 12.12.2019
comment
можем ли мы перейти в чат, трассировка стека слишком длинная, в комментариях не корректируется? Я не знаю, как включить сохранение состояния в wso2sp? - person Rahul Anand; 12.12.2019
comment
После использования json: toObject (payload) я хочу извлечь весь действительный json внутри полезной нагрузки - person Rahul Anand; 12.12.2019
comment
конечно, если это запросы, связанные с сиддхи, вы также можете использовать наш канал Slack, siddhi.io/community - person Niveathika; 12.12.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Rahul Anand; 12.12.2019
comment
я отправил трассировку стека в чат - person Rahul Anand; 12.12.2019
comment
Вы имеете в виду регулярное выражение. * A = {. *} Например - person Rahul Anand; 12.12.2019