Как удалить пустые строковые поля в Output Root. JSON .Data esql - PullRequest
0 голосов
/ 21 февраля 2020

Как перебрать Вывод Root. JSON .Данные и удалить пустые строковые поля

Ввод

{
firstName : 'test,
lastName : ''
}

Результат

{
firstName : 'test'
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Пожалуйста, посмотрите код ниже:

    CREATE PROCEDURE removeEmpty (IN inData REFERENCE, INOUT outData REFERENCE) BEGIN
        DECLARE n INTEGER CARDINALITY(inData.*:*[]);
        DECLARE i INTEGER 0;
        DECLARE Ref REFERENCE TO outData;

        WHILE i < n DO
            SET i = i + 1;

            DECLARE fieldTp INTEGER FIELDTYPE(inData.*:*[i]);
            -- 50331648 is NameValue type
            IF fieldTp = 50331648 THEN
                IF FIELDVALUE(inData.*:*[i]) IS NOT NULL AND LENGTH(CAST(FIELDVALUE(inData.*:*[i]) AS CHARACTER)) > 0 THEN
                    CREATE LASTCHILD OF Ref TYPE FIELDTYPE(inData.*:*[i]) NAME FIELDNAME(inData.*:*[i]) VALUE FIELDVALUE(inData.*:*[i]);
                END IF;
            ELSE
                CREATE LASTCHILD OF Ref TYPE FIELDTYPE(inData.*:*[i]) NAME FIELDNAME(inData.*:*[i]);
                CALL removeEmpty(inData.*:*[i], Ref.*[<]);
                MOVE Ref TO outData;
            END IF;
        END WHILE;

        MOVE outData TO Ref;
    END;
0 голосов
/ 25 февраля 2020

Вот как я это решил

WHILE LASTMOVE(ref) DO 
    DECLARE count INT 0;
    DECLARE total INT  CARDINALITY(ref.*:*[]);
    WHILE count < total DO 
        SET count  = count +1; 
        IF NOT TRIM(FIELDVALUE(ref.*:*[count])) = '' THEN
            SET OutputRoot.JSON.Data.{FIELDNAME(ref.*:*[count])}  = TRIM(FIELDVALUE(ref.*:*[count]));
        END IF; 

    END WHILE;
    MOVE ref NEXTSIBLING REPEAT NAME;
END WHILE;
...