【发布时间】:2015-01-27 12:26:05
【问题描述】:
出于各种原因,我正在创建一个应用程序,它将 SQL 查询字符串作为 URL 参数并将其传递给 Postgres(类似于 CartDB SQL API 和 CFPB 的 Qu)。然后 Rails 呈现来自 Postgres 的结果的 JSON 响应。
来自我的控制器的片段:
@table = ActiveRecord::Base.connection.execute(@query)
render json: @table
这很好用。但是当我使用 Postgres JSON 函数(row_to_json、json_agg)时,它会将嵌套的 JSON 属性呈现为字符串。例如,以下查询:
query?q=SELECT max(municipal) AS series, json_agg(row_to_json((SELECT r FROM (SELECT sch_yr,grade_1 AS value ) r WHERE grade_1 IS NOT NULL))ORDER BY sch_yr ASC) AS values FROM ed_enroll WHERE grade_1 IS NOT NULL GROUP BY municipal
返回:
{
series: "Abington",
values: "[{"sch_yr":"2005-06","value":180}, {"sch_yr":"2005-06","value":180}, {"sch_yr":"2006-07","value":198}, {"sch_yr":"2006-07","value":198}, {"sch_yr":"2007-08","value":158}, {"sch_yr":"2007-08","value":158}, {"sch_yr":"2008-09","value":167}, {"sch_yr":"2008-09","value":167}, {"sch_yr":"2009-10","value":170}, {"sch_yr":"2009-10","value":170}, {"sch_yr":"2010-11","value":153}, {"sch_yr":"2010-11","value":153}, {"sch_yr":"2011-12","value":167}, {"sch_yr":"2011-12","value":167}]"
},
{
series: "Acton",
values: "[{"sch_yr":"2005-06","value":353}, {"sch_yr":"2005-06","value":353}, {"sch_yr":"2006-07","value":316}, {"sch_yr":"2006-07","value":316}, {"sch_yr":"2007-08","value":323}, {"sch_yr":"2007-08","value":323}, {"sch_yr":"2008-09","value":327}, {"sch_yr":"2008-09","value":327}, {"sch_yr":"2009-10","value":336}, {"sch_yr":"2009-10","value":336}, {"sch_yr":"2010-11","value":351}, {"sch_yr":"2010-11","value":351}, {"sch_yr":"2011-12","value":341}, {"sch_yr":"2011-12","value":341}]"
}
因此,它仅部分呈现 JSON,当我在查询中使用 Postgres 函数创建的嵌套 JSON 数组时遇到问题。
我不知道从哪里开始解决这个问题。有任何想法吗?我确定这是 Rails 的问题。
【问题讨论】:
标签: ruby-on-rails json postgresql