2017-07-20 1 views
2

PostgeSQL kehrt liefert den json_build_object als Eltern für jede gruppierte json Array wie folgt:postgresql build_json_object

{ 
    "status": "success", 
    "stories": [{ 
     "json_build_object": { 
      "CNN": [] 
     } 
     }, 
     { 
     "json_build_object": { 
      "FOX": [] 
     } 
     }, 
     { 
     "json_build_object": { 
      "Huffpost": [] 
     } 
     },... 

Postgresql gibt den "json_build_object" als Schlüssel. Ist es möglich, durch den von der Gruppe zurückgegebenen Wert stories.source zu ersetzen?

SELECT json_build_object(source, json_agg(stories.*)) 
FROM stories 
GROUP BY stories.source 
ORDER BY source; 

Optimale Lösung wäre eine Antwort so aussehen:

stories: 
    CNN: [], 
    FOX: []... 

Ich bin sicher, ich bin für die Rückkehr JSON in Postgresql eine beste Praxis fehlt ...

+0

pg-promise ändert die empfangenen Daten nicht. –

+0

Ok, wie wurde das json_build_object Attribut hinzugefügt? Ich habe festgestellt, dass dies auch bei der Verwendung der db.func() -Syntax passiert. – nick

+0

Das ist, was Sie von der Abfrage erhalten. Und es ist völlig außerhalb von PG-Versprechen. –

Antwort

2

Es muss ein Möglichkeit, dies in SQL zu tun, aber für das Fehlen von es jetzt, können Sie diese stories Eigenschaft in das richtige Objekt konvertieren:

function convert(stories) { 
    const res = {}; 
    for (let i = 0; i < stories.length; i++) { 
     const obj = stories[i].json_build_object; 
     const name = Object.keys(obj)[0]; 
     res[name] = obj[name]; 
    } 
    return res; 
} 
+0

Danke Vitaly, das war, was ich geplant hatte, ohne eine SQL-Option gefunden zu haben. Wird die Lösung posten, wenn ich es herausgefunden habe. – nick

+0

Hat das schon jemand herausgefunden? Bin selbst in das selbe Problem geraten. –