一尘不染

如何将JSON数组转换为Postgres中的行

json

我在我的postgres数据库中存储了一个json数组。json看起来像这样:

    [
        {
            "operation": "U",
            "taxCode": "1000",
            "description": "iva description",
            "tax": "12"
        },
        {
            "operation": "U",
            "taxCode": "1001",
            "description": "iva description",
            "tax": "12"
        },
        {
            "operation": "U",
            "taxCode": "1002",
            "description": "iva description",
            "tax": "12"
        }
    ]

现在,我需要选择数组,以便任何元素都位于查询结果的不同行中。因此,我执行的SELECT语句必须以这种方式返回数据:

 data
--------------------------------------------------------------------------------------
 { "operation": "U", "taxCode": "1000", "description": "iva description", "tax":"12"}
 { "operation": "U", "taxCode": "1001", "description": "iva description", "tax":"12"}
 { "operation": "U", "taxCode": "1002", "description": "iva description", "tax":"12"}

我尝试使用该unnest()功能

SELECT unnest(json_data::json)
FROM my_table

但它不接受jsonb类型


阅读 696

收藏
2020-07-27

共1个答案

一尘不染

我将pozs最初写的答案发布在评论部分。

unnest() 适用于PostgreSQL的数组类型。

而是可以使用以下功能之一:

  • json_array_elements(json) (9.3+)
  • jsonb_array_elements(jsonb) (9.4+)
  • json[b]_array_elements_text(json[b]) (9.4+)

范例

select * from json_array_elements('[1,true, [2,false]]')

产值

 -------------
 | 1         |
 -------------
 | true      |
 -------------
 | [2,false] |
 -------------

这里可以找到v9.4的文档。

2020-07-27