动态JSON键/值对代ESQL

穆罕默德·乌丁Faizan:

如何变换从外部系统到在ESQL有意义的数据(键/值对)检索JSON响应?

检索JSON:

{
    "data": [
        {
            "name": "application.info.header",
            "value": "headerValue"
        },
        {
            "name": "entity.statistics.name.fullName",
            "value": "fullNameValue"
        },
        {
            "name": "application.info.matter",
            "value": "matterValue"
        },
        {
            "name": "entity.statistics.skill",
            "value": "skillValue"
        }
    ]
}

哪里,

  • name 〜JSON的层次(最后一个属性是关键)

  • value 〜反对键值

预计JSON:

{
    "data": {
        "application": {
            "info": {
                "header": "headerValue",
                "matter": "matterValue"
            }
        },
        "entity": {
            "statistics": {
                "name": {
                    "fullName": "fullNameValue"
                },
                "skill": "skillValue"
            }
        }
    }
}

不用说,这可以在Java中通过容易实现Split的方法-我在寻找一个合适的方法在ESQL。

当前ESQL模块:

CREATE COMPUTE MODULE getDetails_prepareResponse
    CREATE FUNCTION Main() RETURNS BOOLEAN
    BEGIN
        DECLARE data REFERENCE TO InputRoot.JSON.Data.data.Item[1];
        SET OutputRoot.JSON.Data = InputRoot.JSON.Data;
        SET OutputRoot.JSON.Data.data = NULL;

        WHILE LASTMOVE(data) DO
            DECLARE keyA CHARACTER SUBSTRING(data.name BEFORE '.');
            DECLARE name CHARACTER SUBSTRING(data.name AFTER '.');
            DECLARE keyB CHARACTER SUBSTRING(name BEFORE '.');
            DECLARE key CHARACTER SUBSTRING(name AFTER '.');
            CREATE LASTCHILD OF OutputRoot.JSON.Data.data.{EVAL('keyA')}.{EVAL('keyB')}
            NAME key VALUE data.value;
            MOVE data NEXTSIBLING;
        END WHILE;

        RETURN TRUE;
    END;
END MODULE;

这是目前通过处理SUBSTRING方法在ESQL(仅用于3级),但现在的JSON水平是动态的(没有限制的键/值对),按照要求。

亚当·赖斯:

你可以实现你自己的程序拆分字符串。看看这个答案的一个例子。

ESQL用于将字符串分割成多张值

该方法拆分S于DELIM入的Env(Environment.Split.Array []),并移除Environment.Split阵列再填充它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章