How to convert json into json array in pgsql
I face some issue to convert the data into json object. There is a table called milestone with the following data:
id name parentId
a test1 A
b test2 B
c test3 C
d test4 A
e test5 B
I want to convert the result into a json type in Postgres:
content(json type) parentId
"assignees": [{"id": "a", "name": "test1"},{"id": "d", "name": "test4"}] A
"assignees": [{"id": "b", "name": "test2"},{"id": "e", "name": "test5"}] B
"assignees": [{"id": "c", "name": "test3"}] C
sql json postgresql
add a comment |
I face some issue to convert the data into json object. There is a table called milestone with the following data:
id name parentId
a test1 A
b test2 B
c test3 C
d test4 A
e test5 B
I want to convert the result into a json type in Postgres:
content(json type) parentId
"assignees": [{"id": "a", "name": "test1"},{"id": "d", "name": "test4"}] A
"assignees": [{"id": "b", "name": "test2"},{"id": "e", "name": "test5"}] B
"assignees": [{"id": "c", "name": "test3"}] C
sql json postgresql
add a comment |
I face some issue to convert the data into json object. There is a table called milestone with the following data:
id name parentId
a test1 A
b test2 B
c test3 C
d test4 A
e test5 B
I want to convert the result into a json type in Postgres:
content(json type) parentId
"assignees": [{"id": "a", "name": "test1"},{"id": "d", "name": "test4"}] A
"assignees": [{"id": "b", "name": "test2"},{"id": "e", "name": "test5"}] B
"assignees": [{"id": "c", "name": "test3"}] C
sql json postgresql
I face some issue to convert the data into json object. There is a table called milestone with the following data:
id name parentId
a test1 A
b test2 B
c test3 C
d test4 A
e test5 B
I want to convert the result into a json type in Postgres:
content(json type) parentId
"assignees": [{"id": "a", "name": "test1"},{"id": "d", "name": "test4"}] A
"assignees": [{"id": "b", "name": "test2"},{"id": "e", "name": "test5"}] B
"assignees": [{"id": "c", "name": "test3"}] C
sql json postgresql
sql json postgresql
edited Nov 23 at 6:49
a_horse_with_no_name
291k46444537
291k46444537
asked Nov 23 at 2:21
mres
82
82
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You can use jsonb_build_object()
to create the id/name pairs, and then aggregate that into an array using jsonb_agg()
:
select parentid,
jsonb_build_object('assignees', jsonb_agg(jsonb_build_object('id', id, 'name', name)))
from milestone
group by parentid
order by parentid;
If you don't want to repeat the column names, or if you have more columns than you have shown you could also use to_jsonb()
and then remove the parentid
:
select m.parentid,
jsonb_build_object('assignees', jsonb_agg(to_jsonb(m) - 'parentid')))
from milestone m
group by m.parentid
order by m.parentid;
Online example: https://rextester.com/JXVFF71777
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53439935%2fhow-to-convert-json-into-json-array-in-pgsql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use jsonb_build_object()
to create the id/name pairs, and then aggregate that into an array using jsonb_agg()
:
select parentid,
jsonb_build_object('assignees', jsonb_agg(jsonb_build_object('id', id, 'name', name)))
from milestone
group by parentid
order by parentid;
If you don't want to repeat the column names, or if you have more columns than you have shown you could also use to_jsonb()
and then remove the parentid
:
select m.parentid,
jsonb_build_object('assignees', jsonb_agg(to_jsonb(m) - 'parentid')))
from milestone m
group by m.parentid
order by m.parentid;
Online example: https://rextester.com/JXVFF71777
add a comment |
You can use jsonb_build_object()
to create the id/name pairs, and then aggregate that into an array using jsonb_agg()
:
select parentid,
jsonb_build_object('assignees', jsonb_agg(jsonb_build_object('id', id, 'name', name)))
from milestone
group by parentid
order by parentid;
If you don't want to repeat the column names, or if you have more columns than you have shown you could also use to_jsonb()
and then remove the parentid
:
select m.parentid,
jsonb_build_object('assignees', jsonb_agg(to_jsonb(m) - 'parentid')))
from milestone m
group by m.parentid
order by m.parentid;
Online example: https://rextester.com/JXVFF71777
add a comment |
You can use jsonb_build_object()
to create the id/name pairs, and then aggregate that into an array using jsonb_agg()
:
select parentid,
jsonb_build_object('assignees', jsonb_agg(jsonb_build_object('id', id, 'name', name)))
from milestone
group by parentid
order by parentid;
If you don't want to repeat the column names, or if you have more columns than you have shown you could also use to_jsonb()
and then remove the parentid
:
select m.parentid,
jsonb_build_object('assignees', jsonb_agg(to_jsonb(m) - 'parentid')))
from milestone m
group by m.parentid
order by m.parentid;
Online example: https://rextester.com/JXVFF71777
You can use jsonb_build_object()
to create the id/name pairs, and then aggregate that into an array using jsonb_agg()
:
select parentid,
jsonb_build_object('assignees', jsonb_agg(jsonb_build_object('id', id, 'name', name)))
from milestone
group by parentid
order by parentid;
If you don't want to repeat the column names, or if you have more columns than you have shown you could also use to_jsonb()
and then remove the parentid
:
select m.parentid,
jsonb_build_object('assignees', jsonb_agg(to_jsonb(m) - 'parentid')))
from milestone m
group by m.parentid
order by m.parentid;
Online example: https://rextester.com/JXVFF71777
edited Nov 23 at 7:03
answered Nov 23 at 6:52
a_horse_with_no_name
291k46444537
291k46444537
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53439935%2fhow-to-convert-json-into-json-array-in-pgsql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown