Ответы пользователя по тегу JSON
  • Как добавить значение в массив jsonb postgresql 9.6?

    @alfangur
    в вашем случае, в случае работы с объектом можно пойти таким путем:

    DO
    $$
    DECLARE
    objectOrigin jsonb;
    objectModingCount jsonb;
    objectModingCraft jsonb;
    arrayCraft jsonb;
    BEGIN
    objectOrigin = '{"craft":[], "count":0}'::jsonb;
    
    arrayCraft = objectgetvaluearray(objectOrigin, 'craft', '[]');
    arrayCraft = arraypushstring(arrayCraft, 'string');
    arrayCraft = arraypushnumber(arrayCraft, '1234567890');
    arrayCraft = arraypushboolean(arrayCraft, 'true');
    arrayCraft = arraypushobject(arrayCraft, '{}');
    arrayCraft = arraypusharray(arrayCraft, '[]');
    
    objectModingCount = objectsetvaluenumber(objectModingCount, 'count', 2);
    objectModingCraft = objectsetvaluearray(objectModingCraft, 'craft', arrayCraft);
    
    objectOrigin = objectOrigin || objectModingCount || objectModingCraft;
    RAISE NOTICE '%', objectOrigin;
    END;
    $$
    LANGUAGE plpgsql;

    NOTICE: {"count": 2, "craft": ["string", 1234567890, true, {}, []]}
    CONTEXT: PL/pgSQL function inline_code_block line 21 at RAISE
    результат запроса (1 строка) отброшен.

    Query returned successfully with no result in 18 msec.


    objectgetvaluearray, arraypushstring, arraypushnumber, arraypushboolean, arraypushobject, arraypusharray, objectsetvaluenumber, objectsetvaluearray - это мои обертки над стандартными функциями (устал в коде вечно приводить к типу и всякие скобки и тире писать), обычные getters и setters.

    есть еще функция jsonb_set, с ее помощью можно манипулировать данными нужной глубины. почитайте в документации. в документации много описано и с примерами, также загляните в раздел функций в pg_catalog и найдите все функции у которых название начинается на "jsonb_", поиграйтесь с ними.

    настоятельно рекомендую изучить особенность конкатенации объектов и массивов jsonb.
    Ответ написан