簡體   English   中英

Postgres 將多行放入單個 json object

[英]Postgres get multiple rows into a single json object

我有一個用戶表,其中包含idnameemail等列。我想在單個 json object 中以以下格式檢索一些用戶的信息:

{
    "userId_1" : {"name" : "A", "email": "A@gmail.com"},
    "userId_2" : {"name" : "B", "email": "B@gmail.com"}
}

其中用戶的唯一id是key,一個包含他信息的json是其對應的值。

我可以使用json_build_object在兩個單獨的行中獲取此信息,但我希望它以單個 json object 的形式在單個行中獲取。

您可以使用 json 聚合函數:

select jsonb_object_agg(id, to_jsonb(t) - 'id') res
from mytable t

jsonb_object_agg()將鍵/值對聚合到單個 object 中。 鍵是每一行的id ,值是一個 jsonb object,由表中除id之外的所有列組成。

DB Fiddle 上的演示

樣本數據:

id       | name | email      
:------- | :--- | :----------
userid_1 | A    | A@gmail.com
userid_2 | B    | B@gmail.com

結果:

| res                                                                                                    |
| :----------------------------------------------------------------------------------------------------- |
| {"userid_1": {"name": "A", "email": "A@gmail.com"}, "userid_2": {"name": "B", "email": "B@gmail.com"}} |

嘗試 -

select row_to_json(col) from T

下面的鏈接可能會幫助https://hashrocket.com/blog/posts/faster-json-generation-with-postgresql

嘗試這個:

SELECT json_object(array_agg(id), array_agg(json::text)) FROM ( SELECT id, json_build_object('name', name, 'email', email) as json FROM users_table ) some_alias_name

如果您的 id 不是文本類型,那么您也必須將其轉換為文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM