[使用SIddhi Execution Json API从文本中提取json

问题描述 投票:0回答:1

我正在尝试使用Siddhi json执行API从文本中提取有效的json。我已经从wso2商店下载了siddhi-execution-json-1.1.1.jar,并遵循该文档中提到的示例。但是上面相同的语法没有给出“ SiddhiiQl中的语法错误,输入'input'不匹配,期望{',',GROUP,ORDER,LIMIT ....}”的错误。以下是我的synatx:

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

我正在使用以下来自Transact Stream的文本:

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;

我想在WSO2流处理器中提取有效的json内部数据:“”。我应该使用其他扩展名还是执行方式存在错误?我在上面需要以下查询:@ info(name ='query_name')从上述文本中获取json

wso2 siddhi wso2sp json-extract
1个回答
0
投票

这里没有什么要注意的,

  1. 您正在尝试使用json:group()函数,但是,从API docs开始,v1.1.1不支持此功能,这是语法错误的原因。 json:group()是一个聚合函数,假设我想每3个事件将JSON元素组合到一个json中,在这种情况下,可以使用group(),但不能在您的情况下使用。 json:group()仅在siddhi-execution-json的2.x.x版本中可用,该版本与WSO2流处理器不兼容。它与siddhiRunner(完全开放源代码产品,专注于为siddhi lib提供本地化云功能)兼容。 wso2 sp的下一代。

  2. 从上一个问题开始,您似乎已经在payload元素内提取了json字符串。但是,这是字符串类型,您需要将它作为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()也是function extension type,用于在一个事件中转换属性。

  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. BTW,这是通过Debezium检索的MongoDB更改吗?

© www.soinside.com 2019 - 2024. All rights reserved.