2016-04-12 10 views
3

tüm json alanı anahtarının dizisini almak, bu alan bir json türü aşağıdaki örnekte olduğu gibi bir değere sahiptir olduğuBen kullanıcı adında bir tabloya sahip ve tablonun içine arkadaşları denilen bir alan vardır postgresql

{"blockList": {"199": {"date": 1453197190, "status": 1}, "215": {"date": 1459325611, "status": 1}, "219": {"date": 1454244074, "status": 1}, "225": {"date": 1453981312, "status": 1}, "229": {"date": 1459327685, "status": 1}}, "followers": {"211": {"date": 1452503369}, "219": {"date": 1452764627}, "334": {"date": 1456396375}}, "following": {"215": {"date": 1459325619}, "219": {"date": 1453622322}, "226": {"date": 1454244887}, "229": {"date": 1459327691}}, "friendList": {"213": {"date": 1453622410, "type": 2, "status": 1}, "214": {"date": 1452763643, "status": 1}, "215": {"date": 1455606872, "type": 2, "status": 2}, "218": {"date": 1453280047, "status": 1}, "219": {"date": 1453291227, "status": 2}, "221": {"date": 1453622410, "type": 2, "status": 1}, "224": {"date": 1453380152, "type": 2, "status": 1}, "225": {"date": 1453709357, "type": 2, "status": 2}, "226": {"date": 1454244088, "type": 2, "status": 1}, "229": {"date": 1454326745, "type": 2, "status": 2}}} 

Bu kayıtta, engellenen kullanıcılar için nesneleri barındıran bir blockList nesnesi vardır. Ihtiyacım olanı , bir plpgsql fonksiyonunu ki (bir dizideki tüm nesne anahtarlarını iade) yapmak yazabilirsiniz nasıl bu

["199", "215", "219", "225", "229"] 

herhangi bir yardım gibi tüm blok liste tuşların bir dizi dönmek nedir? Psotgresql'de yeni başlayan biriyim ve lütfen yardıma ihtiyacım var.

cevap

3

Kullanım json_object_keys ve bir diziye onları toplamak için array_agg kullanmak (böylece sen friends->'blockList' ile yapabileceğiniz blockList anahtar için nesneyi seçmek gerekir):

SELECT ARRAY_AGG(f) 
FROM (
    SELECT json_object_keys(friends->'blockList') f 
    FROM users 
) u; 
┌───────────────────────┐ 
│  array_agg  │ 
├───────────────────────┤ 
│ {199,215,219,225,229} │ 
└───────────────────────┘ 
(1 row) 

Not:
Eğer jsonb türü kullanıyorsanız (ve json bir) Eğer json kullanmanız gerekir b _object_keys işlevi.

+0

HATA: (jsonb) işlevi json_object_keys LINE 4 yok: SEÇ json_object_keys (arkadaşlar -> 'Blocklist') ^ İPUCU f: İşlevsiz verilen isim ve bağımsız değişken türleri ile eşleşir. Müstehcen yayınlar eklemeniz gerekebilir. –

+0

Eğer 'jsonb' kullanıyorsanız,' jsonb_object_keys' işlevini kullanmanız gerekir. – Marth

+0

Whoops diziyi unuttum, güzel cevap. – Imran

3

SELECT array_agg(ks) FROM ( SELECT json_object_keys(friends->'blockList') AS ks FROM users ) x

Ben göstermek için bir SQL keman here oluşturduk.

Not: user ayrılmış bir sözcüktür, bu yüzden tabloyu users olarak adlandırdım. Bir json nesnenin en dıştaki anahtarlarını içeren bir dizi

İlgili konular