2016-04-12 9 views
3

Ich habe eine Tabelle Benutzer genannt, und in der Tabelle gibt es ein Feld Freunde genannt, ist dieses Feld ein json Typ Wert wie im folgenden Beispiel haterhalten Array aller json Feldschlüssel in 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}}} 

Dieser Datensatz enthält ein blockList-Objekt, das Objekte für blockierte Benutzer enthält. , was ich brauche, ist ein Array aller Blockliste Tasten wie diese

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

jede Hilfe zurück, wie kann ich eine plpgsql Funktion schreiben, dass (Rückkehr in einem Array alle Objektschlüssel) zu tun? Ich bin ein Anfänger in psotgresql, und brauche bitte eine Hilfe.

Antwort

3

Verwenden json_object_keys einem Satz die äußersten Tasten eines JSON-Objekt enthält (so müssen Sie das Objekt für die blockList Schlüssel wählen, die Sie mit friends->'blockList' tun können) und array_agg nutzen sie in ein Array zu aggregieren:

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

Hinweis:
Wenn Sie den jsonb Typ verwenden (und nicht die json eins) Sie werden die json verwenden müssen b Funktion _object_keys.

+0

ERROR: function json_object_keys (jsonb) nicht LINE 4 existiert: SELECT json_object_keys (Freunde -> 'Blockliste') f ^ TIPP: Spiele Keine Funktion die angegebenen Namen und Argumenttypen. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen. –

+0

Wenn Sie 'jsonb' verwenden, müssen Sie die Funktion' jsonb_object_keys' verwenden. – Marth

+0

Hoppla, ich habe array_agg vergessen, nette Antwort. – Imran

3

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

Ich habe eine SQL-Geige erstellt here zu demonstrieren.

Hinweis: user ist ein reserviertes Wort, also habe ich die Tabelle users aufgerufen.

Verwandte Themen