Postgres排到json结构

时间:2017-05-29 16:22:54

标签: json postgresql

我需要将表中一行的列放到预定义的json结构中,但只有那些非空的。

我编写了以下代码,但现在我想知道如果它实际上有一个值我只能添加某个键。

  IF(i_zone_id NOTNULL) THEN
    SELECT to_jsonb(('[{"n": "'       || coalesce("name"::text, '') || '",
      "id": "'                        || coalesce(controller_zone_id::text, '') ||'",
      "calc": "'                      || coalesce(calculate_using::text, '') || '",
      "aa": "'                        || coalesce(anode_area::text, '') || '",
      "ca": "'                        || coalesce(cathode_area::text, '') || '",
      "startMonitoringInterval": "'   || coalesce(start_mon_interval::text, '') || '",
      "interval": "'                  || coalesce("interval"::text, '') || '",
      "interval1": "'                 || coalesce(interval1::text, '') || '",
      "mt": "'                        || coalesce(monitoring::text, '') || '",
      "totalInterval": "'             || coalesce(total_interval::text, '') || '"' ||
      t_nodes ||
      t_ppsus ||
      '}]')::jsonb)
    FROM  cfg_zn
    WHERE zone_id = i_zone_id
    INTO  jb_zone;

我想阻止将密钥添加到json数组中,如果它们是空的。

1 个答案:

答案 0 :(得分:1)

这样的东西?

SELECT  -- Eliminate all keys with 'null' values
        jsonb_strip_nulls(
            -- Build json objects structure
            jsonb_build_object(
                'n', "name"::text,
                'id', controller_zone_id::text,
                'calc', controller_zone_id::text,
                'aa', anode_area::text,
                'ca', cathode_area::text,
                'startMonitoringInterval', start_mon_interval::text,
                'interval', "interval"::text,
                'interval1', interval1::text,
                'mt', monitoring::text,
                'totalInterval', total_interval::text
            )
            -- Concatenate jsonb columns
            || t_nodes
            || t_ppsus
        )
FROM    cfg_zn
WHERE   zone_id = i_zone_id
INTO    jb_zone;

我认为t_nodest_ppsus已经是自己的jsons。

有关json(b)函数和运算符的更多信息:https://www.postgresql.org/docs/current/static/functions-json.html