With the following snippet I am building a valid JSON string:
(SELECT CONCAT('{', array_to_string(array_agg(info),','), '}')
FROM (
SELECT CONCAT('"', "displayOrder", '":',
CONCAT('{"milestoneID":',
"milestoneID"::TEXT,
',"msValue":"',
"msValue",
'","msColor":"',
"msColor", '"}'
)
) AS info
FROM "fileMilestones"
LEFT JOIN milestones ON "fileMilestones"."milestoneID" = milestones.id
WHERE "fileMilestones"."fileNumber" = wc_files."fileNumber"
) AS msa
) AS ms,
However, it is just a string and is not seen as a JSON object. I am sure I am doing this wrong...
Here is the table structure:
CREATE TABLE public."fileMilestones"
(
id integer NOT NULL DEFAULT nextval('"fileMilestones_id_seq"'::regclass),
"fileNumber" integer,
"milestoneID" smallint,
"msValue" text,
"msColor" text,
CONSTRAINT "fileMilestones-id.constraint" PRIMARY KEY (id),
CONSTRAINT "fileMilestones-fileNumber-milestoneID.constraint" UNIQUE ("fileNumber", "milestoneID")
)
CREATE TABLE public.milestones
(
id integer NOT NULL DEFAULT nextval('milestones_id_seq'::regclass),
"displayOrder" smallint,
name citext,
days smallint,
start smallint,
"calendarDays" smallint,
description citext,
"moduleID" integer,
CONSTRAINT "milestones-id.constraint" PRIMARY KEY (id),
CONSTRAINT "milestones-name.constraint" UNIQUE (name)
)
This is what the returned JSON needs to look like:
{"10":{"milestoneID":1, "msValue":"", "msColor":"milestoneColorGreen"},
"20":{"milestoneID":2, "msValue":"", "msColor":"milestoneColorGreen"},
"30":{"milestoneID":3, "msValue":"", "msColor":"milestoneColorGreen"},
"40":{"milestoneID":4, "msValue":"", "msColor":"milestoneColorGreen"},
"50":{"milestoneID":10, "msValue":"", "msColor":"milestoneColorGreen"},
"60":{"milestoneID":6, "msValue":"", "msColor":"milestoneColorGreen"},
"70":{"milestoneID":7, "msValue":"", "msColor":"milestoneColorGreen"},
"80":{"milestoneID":8, "msValue":"76", "msColor":""},
"90":{"milestoneID":9, "msValue":"", "msColor":"milestoneColorGreen"}}
How can I build a JSON object and return it as JSON?
array_to_jsonorrow_to_json