Sql 返回带有postgres函数的JSON数组

Sql 返回带有postgres函数的JSON数组,sql,json,postgresql,Sql,Json,Postgresql,我不熟悉Postgres函数。 我试图返回JSON响应的一部分,类似于: "ids":[ "9f076580-b5f5-4e73-af08-54d5fc4b87c0", "bd34cfad-53c7-4443-bf48-280e34d76881" ] 这个ID存储在表单元中,我将其作为子查询的一部分进行查询,然后在下一次查询中将其转换为JS

我不熟悉Postgres函数。 我试图返回JSON响应的一部分,类似于:

"ids":[
        
          "9f076580-b5f5-4e73-af08-54d5fc4b87c0",
          "bd34cfad-53c7-4443-bf48-280e34d76881"
           
       ]
这个ID存储在表单元中,我将其作为子查询的一部分进行查询,然后在下一次查询中将其转换为JSON

SELECT coalesce(json_agg(row_to_json(wgc)), '[]'::json)
FROM (
         SELECT
            (
                SELECT COALESCE(json_agg(row_to_json(ids)), '[]'::json)
                FROM (SELECT json_agg(l.ids) as "id"
                      FROM unit
                     ) as ids
            )  as "ids",
             ......
         FROM companies c
               
 ) AS wgc;
问题是这个查询给了我要省略的提取对象。 ID:[ { 身份证:[ 9f076580-b5f5-4e73-af08-54d5fc4b87c0, bd34cfad-53c7-4443-bf48-280e34d76881 ] } ]


怎么能省略这个id对象呢?

要知道您的表是什么样子有点困难,但类似的东西应该可以工作:

select jsonb_build_object('ids', coalesce(jsonb_agg(id), '[]'::jsonb))
from unit
我认为你把事情复杂化了。您只需要一个嵌套级别就可以将ID作为数组获取。在ID数组上不需要使用row_to_json。外层的第_行到第_行json将正确处理这个问题

SELECT coalesce(json_agg(row_to_json(wgc)), '[]'::json)
FROM (
  SELECT (SELECT json_agg(l.ids) FROM unit ) as ids
         .... 
  FROM companies c
) AS wgc;

事实上,选择。。。from unit不是一个相关联的子查询,但有点可疑。这意味着您将为companys表中的每一行获得相同的数组。我本以为会有类似select的东西。。从单元u开始,其中u.??=C作为ids,要知道您的表是什么样子有点困难,但是类似这样的东西应该可以工作:

select jsonb_build_object('ids', coalesce(jsonb_agg(id), '[]'::jsonb))
from unit
我认为你把事情复杂化了。您只需要一个嵌套级别就可以将ID作为数组获取。在ID数组上不需要使用row_to_json。外层的第_行到第_行json将正确处理这个问题

SELECT coalesce(json_agg(row_to_json(wgc)), '[]'::json)
FROM (
  SELECT (SELECT json_agg(l.ids) FROM unit ) as ids
         .... 
  FROM companies c
) AS wgc;

事实上,选择。。。from unit不是一个相关联的子查询,但有点可疑。这意味着您将为companys表中的每一行获得相同的数组。我本以为会有类似select的东西。。从单元u开始,其中u.??=C作为ids,我不完全理解你的问题。此代码:

SELECT (
            SELECT COALESCE(json_agg(row_to_json(ids)), '[]'::json)
            FROM (SELECT json_agg(l.ids) as "id"
                  FROM unit l
                 ) as ids
        )  as "ids"
返回:

[{"id":["9f076580-b5f5-4e73-af08-54d5fc4b87c0", "bd34cfad-53c7-4443-bf48-280e34d76881as"]}]
这似乎是你想要的

他是一把小提琴


查询中的其他内容是返回一个以ID作为字段的JSON对象。你似乎想要构造你想要的对象。

我不完全理解你的问题。此代码:

SELECT (
            SELECT COALESCE(json_agg(row_to_json(ids)), '[]'::json)
            FROM (SELECT json_agg(l.ids) as "id"
                  FROM unit l
                 ) as ids
        )  as "ids"
返回:

[{"id":["9f076580-b5f5-4e73-af08-54d5fc4b87c0", "bd34cfad-53c7-4443-bf48-280e34d76881as"]}]
这似乎是你想要的

他是一把小提琴


查询中的其他内容是返回一个以ID作为字段的JSON对象。你似乎想要构造你想要的对象。

l是什么?您的查询不完整。l是什么?您的查询不完整。已更新一点。很抱歉,我不能发布完整查询的真实代码。谢谢你的帮助。基本上,它是嵌套在另一个内部postgres函数中的select。更新了一点。很抱歉,我不能发布完整查询的真实代码。谢谢你的帮助。基本上,它是嵌套在另一个内部postgres函数中的select。你说得对。找到了一个解决方案SELECT coalescejson_aggrow_to_jsonwgc,[]::来自SELECT SELECT coalescejson_agg ids的json。。。。。基本上有一个级别是冗余的,你是对的。找到了一个解决方案SELECT coalescejson_aggrow_to_jsonwgc,[]::来自SELECT SELECT coalescejson_agg ids的json。。。。。基本上有一个层次是多余的