मैं उस row_to_json()
फ़ंक्शन का उपयोग करके JSON को क्वेरी के परिणामों को मैप करने की कोशिश कर रहा हूं जो PostgreSQL 9.2 में जोड़ा गया था।
मुझे नेस्टेड ऑब्जेक्ट्स (1: 1 संबंध) के रूप में सम्मिलित पंक्तियों का प्रतिनिधित्व करने का सबसे अच्छा तरीका पता लगाने में परेशानी हो रही है
यहाँ मैंने क्या कोशिश की है (सेटअप कोड: टेबल, नमूना डेटा, इसके बाद क्वेरी):
-- some test tables to start out with:
create table role_duties (
id serial primary key,
name varchar
);
create table user_roles (
id serial primary key,
name varchar,
description varchar,
duty_id int, foreign key (duty_id) references role_duties(id)
);
create table users (
id serial primary key,
name varchar,
email varchar,
user_role_id int, foreign key (user_role_id) references user_roles(id)
);
DO $$
DECLARE duty_id int;
DECLARE role_id int;
begin
insert into role_duties (name) values ('Script Execution') returning id into duty_id;
insert into user_roles (name, description, duty_id) values ('admin', 'Administrative duties in the system', duty_id) returning id into role_id;
insert into users (name, email, user_role_id) values ('Dan', 'someemail@gmail.com', role_id);
END$$;
क्वेरी ही:
select row_to_json(row)
from (
select u.*, ROW(ur.*::user_roles, ROW(d.*::role_duties)) as user_role
from users u
inner join user_roles ur on ur.id = u.user_role_id
inner join role_duties d on d.id = ur.duty_id
) row;
मैंने पाया कि अगर मैंने उपयोग किया ROW()
, तो मैं परिणामी फ़ील्ड को एक चाइल्ड ऑब्जेक्ट में अलग कर सकता हूं, लेकिन यह एक एकल स्तर तक सीमित लगता है। मैं और अधिक AS XXX
बयान नहीं डाल सकता , जैसा कि मुझे लगता है कि मुझे इस मामले में आवश्यकता होनी चाहिए।
मुझे स्तंभ नाम दिए गए हैं, क्योंकि मैं ::user_roles
उस तालिका के परिणामों के मामले में, उदाहरण के लिए, उपयुक्त रिकॉर्ड प्रकार पर जाता हूं ।
यहां बताया गया है कि क्वेरी क्या लौटाती है:
{
"id":1,
"name":"Dan",
"email":"someemail@gmail.com",
"user_role_id":1,
"user_role":{
"f1":{
"id":1,
"name":"admin",
"description":"Administrative duties in the system",
"duty_id":1
},
"f2":{
"f1":{
"id":1,
"name":"Script Execution"
}
}
}
}
मैं जोन्स उत्पन्न करने के लिए JSON उत्पन्न करता हूं (फिर से 1: 1 ठीक है) एक तरह से जहां मैं जॉइन जोड़ सकता हूं, और क्या उन्होंने माता-पिता की बाल वस्तुओं के रूप में प्रतिनिधित्व किया है जो वे शामिल होते हैं, अर्थात निम्नलिखित जैसे:
{
"id":1,
"name":"Dan",
"email":"someemail@gmail.com",
"user_role_id":1,
"user_role":{
"id":1,
"name":"admin",
"description":"Administrative duties in the system",
"duty_id":1
"duty":{
"id":1,
"name":"Script Execution"
}
}
}
}
किसी भी मदद की सराहना की है। पढ़ने के लिए धन्यवाद।