我有一个复杂的数据库,其中的键和值存储在不同的表中。在拉出应用程序的值时,我可以使用它来聚合它们:
SELECT array_agg(key_name), array_agg(vals)
FROM (
SELECT
id,
key_name,
array_agg(value)::VARCHAR(255) AS vals
FROM factor_key_values
WHERE id=20
GROUP BY key_name, id
) f;
这个特殊的查询,在我的例子中给出了以下无效的json:
-[ RECORD 1 ]-----------------------------------------------------------------------
array_agg | {"comparison method","field score","field value"}
array_agg | {"{\"text category\"}","{100,70,50,0,30}","{A,B,C,F,\"No Experience\"}"}
请注意,只有字符串有空格才会引用varchars数组。我已将其缩小到ARRAY_AGG
的行为。为了完整性,这里是一个例子:
BEGIN;
CREATE TABLE test (txt VARCHAR(255));
INSERT INTO test(txt) VALUES ('one'),('two'),('three'), ('four five');
SELECT array_agg(txt) FROM test;
结果将是:
{one,two,three,"four five"}
这就是我的json破产的原因。我可以在应用程序代码中处理不带引号或带引号的字符串,但是可以混合使用。这有什么解决方案吗?
答案 0 :(得分:3)
你不能使用json_agg
吗?
select json_agg(txt) from test;
json_agg
--------------------------------------
["one", "two", "three", "four five"]
答案 1 :(得分:0)