Devuelve la estructura jerárquica json en una sola consulta SQL

Necesito crear una consulta SQL (postgres 9.5.3) que devuelva un resultado json jerárquico. Este es el código que escribí hasta ahora

WITH RECURSIVE q AS ( 
    WITH c AS (
        SELECT pc."Id", pc."Description"
        FROM "ProductCategories" pc 
        WHERE pc."Active" = true 
    )
    SELECT pc, ARRAY[c] as "Children", ARRAY[pc."Id"] as "Path" 
    FROM "ProductCategories" pc 
    LEFT JOIN c ON pc."Id" = c."Id"
    WHERE NULLIF(pc."ParentId", 0) IS NULL 
    AND pc."Active" = true 
    UNION ALL 
    SELECT pc_descendant, array_append(q."Children", c), q."Path" || pc_descendant."Id" 
    FROM q 
    JOIN "ProductCategories" pc_descendant ON pc_descendant."ParentId" = (q.pc)."Id" 
    LEFT JOIN c ON pc_descendant."Id" = c."Id"
    WHERE pc_descendant."Active" = true 
)
SELECT * FROM q

Tengo un problema para crear un objeto jerárquicoChildren. Para estas estructura

A
    B
        C
D
    E

elarray_append Las funciones parecen agregar elementos secundarios en una sola matriz:

A.Children = [ {B}, {C}, {D} ]    //for category A

Necesito estructura:

  A.Children = [ {B, Children = [ {C, Children = [ {D} ] } ] } ]

¿Cómo puedo cambiar mi consulta para lograr esto? Saludos