2
我想根据匹配键获取jsonb结果。 我有数据库表“列表”与数字和数据列。postgres + jsonb +从多维数组中获取密钥的值
number | data
1 | {"name": "XYZ company", "city": "toronto", "province": "ON", "people" : [
{ "firstName": "tom", "lastName": "hanks",
"phonenumber": [{"type": "mobile", "Number": "111111"}],
"Email": [{"type": "business", "address": "[email protected]"},{"type": "personal", "address": "[email protected]"}] },
{ "firstName": "sandra", "lastName": "petes",
"phonenumber": [{"type": "mobile", "Number": "333"}, {"type": "home", "Number": "444"}],
"Email": [{"type": "business", "address": "[email protected]"}]
}
]}
我需要拉的数据列的所有值的钥匙 -
- 以人为>姓
- 以人为> lastName的
- 以人为> phonenumber->数
- 人 - >电子邮件 - >地址
我到目前为止取得的成绩是:
SELECT number
,jonb_array_length(jsonb_extract_path(data,'people')) as people_count
,jsonb_extract_path(data,'people','0','firstname') as FirstName
,jsonb_extract_path(data,'people','0','lastname') as LastName
,jsonb_extract_path(data,'people','0','email','Address'") as personEmail
,jsonb_extract_path(data,'people','0','phonenumber','Number') as personPhone
FROM listings
WHERE number='1';
但是,这只给了我第0个元素的人,我需要找到所有元素。有没有办法在单个查询中实现这一点。
谢谢你的时间!
我想在此查询中完成的另一件事是针对电话号码和电子邮件的第0个元素的jsonb_extract_path_text。我试过了jsonb_extract_path_text(people - >'email' - > 0 - >>'Address')以及people - >'email' - > 0 - >> jsonb_extract_path_text('Address')。似乎没有任何工作..任何想法,如果它是可能的? – phpfreak
函数'jsonb_extract_path()'需要一个'jsonb'参数,后面是一个'text []',因此格式为'jsonb_extract_path(data,'{people,0,Email,0,address}') '得到“[email protected]”。在上面的解决方案中,“people”数组已经解包,您可以使用'jsonb_extract_path(people,'{Email,0,address}')'获取所有人的第一个电子邮件地址。 – Patrick
哦真棒,谢谢! – phpfreak