JSON dinámica generación de pares clave / valor en ESQL

Muhammad Faizan Uddin:

¿Cómo transformar respuesta JSON recuperado del sistema externo a datos significativos (pares clave / valor) en ESQL?

Obtenido 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"
        }
    ]
}

dónde,

  • name ~ Jerarquía de JSON (último atributo es la clave)

  • value ~ Valor con la clave

JSON esperado:

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

Huelga decir que esto se puede conseguir fácilmente en Java a través de Splitmétodo - Estoy en busca de un adecuado método de ESQL.

La corriente del módulo 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;

Este es actualmente maneja a través de SUBSTRINGmétodo en ESQL (para 3 niveles solamente), pero ahora los niveles JSON son dinámicos (sin límite a pares clave / valor) según los requisitos.

Adam Rice:

Se podría implementar su propio procedimiento para dividir una cadena. Echar un vistazo a esta respuesta para un ejemplo.

ESQL para dividir una cadena en valores Mulitple

El método se divide en S Delim en una matriz en Env (Environment.Split.Array []) y elimina Environment.Split antes de rellenarlo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=180941&siteId=1
Recomendado
Clasificación