【问题标题】:JSON output in PostgresqlPostgresql 中的 JSON 输出
【发布时间】:2012-06-25 23:03:03
【问题描述】:

我希望我在这里没有遗漏一些非常明显的东西,
我想从 postgres 函数获取 JSON 输出(我想很多其他人已经需要这个),我很乐意在我的服务器上安装 contrib 函数的扩展,

有没有办法从 sql 或 plpgsql 函数(或在 db-server-side python 的帮助下)获取 JSON 输出?具体来说,我想将我的record[] 结果作为 JSON。

【问题讨论】:

    标签: sql json postgresql


    【解决方案1】:

    PostgreSQL 9.2 开始就内置了对 JSON 的支持,并且在最近的版本中增加了许多其他功能(例如:JSON functions in PostgreSQL 0.4)。

    特别是 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 类型的支持,它保存格式为 text 的 json 并对其进行验证,它不会产生 JSON 输出。
    • 您是否查看了第一个链接中的示例?有 query_to_json()array_to_json()record_to_json() 函数,它们根据名称接受输入并将其转换为 JSON。
    • 你说得对,我错过了row_to_json功能,这可能会解决我的问题,谢谢。
    • 前 2 个链接已失效。这就是为什么 StackOverflow 的回答指南建议我们quote the relevant portion from a link
    • 请用解决方案的相关部分更新您的答案,并更新链接,因为它们现在已经失效了。
    【解决方案2】:

    从 9.2 开始使用 record_to_json(...),现在可以使用 backported to 9.1

    【讨论】:

      【解决方案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;
      

      【讨论】:

        【解决方案4】:

        plpython 插件当然可以让你使用 python json 库来做到这一点。

        你可以这样做:

        CREATE OR REPLACE FUNCTION myschema.tojsonfunc()
        AS $$    
        
           import json;
           jsonStr = json.dumps(myrecord)
        
        $$ LANGUAGE plpythonu;
        

        【讨论】:

        • 谢谢,问题是 SQL 查询结果(AKA 记录)不是 sql 可序列化的,有人需要花时间“清理”它们以符合要求,如果我想这样做,我最好在我的实际 python 代码中这样做,而不是用这个来加载可怜的数据库服务器。
        猜你喜欢
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        相关资源
        最近更新 更多