【问题标题】:PostgreSQL array(row_to_json()): How to stop array() functions from adding " quotes to strings and escape \ existing " quotesPostgreSQL 数组(row_to_json()):如何阻止数组()函数添加“引号到字符串并转义\现有的”引号
【发布时间】:2015-05-10 05:48:28
【问题描述】:

尝试将格式正确的 JSON 对象作为单个字段结果返回。

row_to_json() 效果很好,但返回多行。

SELECT row_to_json(ages) FROM (SELECT DISTINCT RIGHT('000' || TRIM(age),3) AS v FROM uspopulation GROUP BY v ORDER BY v) AS ages

生成的行是格式良好的 JSON,但每行一个:

{"v":"000"}

然后我想将该结果集处理成单个行/列结果中的数组:

SELECT array(
SELECT row_to_json(ages) FROM (SELECT DISTINCT RIGHT('000' || TRIM(age),3) AS v FROM uspopulation GROUP BY v ORDER BY v) AS ages
);

这样就达到了预期的效果。但是,它会在每个 JSON 对象周围添加双引号,并转义格式正确的 JSON 对象中的现有引号。

{"{\"v\":\"000\"}","{\"v\":\"001\"}","{\"v\":\"002\"}"}

那么我该如何关闭这种行为才能得到这样的结果:

{{"v":"000"},{"v":"001"},{"v":"002"}}

【问题讨论】:

    标签: arrays json postgresql


    【解决方案1】:

    您可以使用json_agg() 来汇总结果:

    SELECT json_agg(ages) FROM
      (SELECT DISTINCT RIGHT('000' || TRIM(age),3) AS v
       FROM uspopulation GROUP BY v ORDER BY v) AS ages;
    

    这将给出正确的输出。请注意,输出与您描述的不同,因为它是一个数组:

    [{"v":"000"},{"v":"001"},{"v":"002"}]
    

    我认为这是您想要的,因为它是 JSON 数组的正确表示法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2013-08-16
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      相关资源
      最近更新 更多