Postgresql中的JSON输出

11

我希望我没有漏掉什么非常明显的东西,
我想从一个 postgres 函数中获取 JSON 输出 (我想象许多其他人已经需要这个功能),并且我很乐意在我的服务器上安装 contrib 函数扩展,

是否有任何方法可以从 sql 或 plpgsql 函数获得 JSON 输出 (或借助于 db 服务器端的 Python)? 具体来说,我想将 record[] 的结果作为 JSON 获取。

4个回答

12
PostgreSQL 9.2 起,内置支持 JSON,并在后续版本中增加了许多其他功能(例如:PostgreSQL 0.4 中的 JSON 函数)。
特别是,row_to_json 可将记录转换为 JSON 对象,而 array_to_json 则可以将数组转换为 JSON 数组。
例如,这两个函数可以结合使用,轻松将 SELECT 查询的结果转换为 JSON。
SELECT array_to_json(array_agg(row_to_json(t))) FROM 
    (SELECT col1, col2, col3 FROM example_table) t

据我理解,这是支持 JSON 类型的功能,它保存 JSON 格式的“文本”并验证其格式,它不生成 JSON 输出。 - Ali
1
你有检查第一个链接中的示例吗?那里有函数query_to_json()array_to_json()record_to_json(),它们根据名称接受输入并将其转换为JSON。 - madth3
你说得对,我漏掉了 row_to_json 函数,这可能解决我的问题,谢谢。 - Ali
2
前两个链接已经失效。这就是为什么StackOverflow的回答指南建议我们引用链接中相关的部分 - Vicky Chijwani
请更新您的答案,包括解决方案的相关部分,并在链接失效时更新链接。 - Zoltán
感谢您使用PostgreSQL11 + Grails 3.3 + React进行开发。 - Juan Salvador

4

3
在服务器上安装:
sudo apt-get install postgresql-plpython-9.4 然后在您的Postgres服务器上:
CREATE EXTENSION IF NOT EXISTS plpythonu;
CREATE LANGUAGE plpythonu;

CREATE OR REPLACE FUNCTION prettyprint_json(data text)
 RETURNS json
 AS $$
    import json
    return json.dumps(json.loads(data), indent=4)
 $$ LANGUAGE plpythonu;

2

使用 PL/Python 插件可以使用 PythonJSON 库来实现这一点。

您可以像这样操作:

CREATE OR REPLACE FUNCTION myschema.tojsonfunc()
AS $$    

   import json;
   jsonStr = json.dumps(myrecord)

$$ LANGUAGE plpythonu;

1
谢谢,问题在于SQL查询结果(也称为记录)本身不可序列化,需要有人花时间“清理”它们以符合要求。如果我想这样做,最好在我的Python代码中完成,而不是让数据库服务器承担这个负担。 - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接