4

I have a users table with columns like id, name, email, etc. I want to retrieve information of some users in the following format in a single json object:

{
    "userId_1" : {"name" : "A", "email": "[email protected]"},
    "userId_2" : {"name" : "B", "email": "[email protected]"}
}

Wherein the users unique id is the key and a json containing his information is its corresponding value.

I am able to get this information in two separate rows using json_build_object but I would want it get it in a single row in the form of one single json object.

3 Answers 3

9

You can use json aggregation functions:

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

jsonb_object_agg() aggregates key/value pairs into a single object. The key is the id of each row, and the values is a jsonb object made of all columns of the table except id.

Demo on DB Fiddle

Sample data:

id       | name | email      
:------- | :--- | :----------
userid_1 | A    | [email protected]
userid_2 | B    | [email protected]

Results:

| res                                                                                                    |
| :----------------------------------------------------------------------------------------------------- |
| {"userid_1": {"name": "A", "email": "[email protected]"}, "userid_2": {"name": "B", "email": "[email protected]"}} |
Sign up to request clarification or add additional context in comments.

Comments

1

try -

select row_to_json(col) from T

link below might help https://hashrocket.com/blog/posts/faster-json-generation-with-postgresql

Comments

1

Try this:

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

If your id is not of text type then you have to cast it to text too.

1 Comment

Thanks, gives the desired output.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.