JSON 数据库 table 查询

JSON database table query

我有 JSON table 一些对象,我正在尝试查询对象中的金额值

{
"authorizations": [
{
  "id": "d50",
  "type": "passed",
  "amount": 100,
  "fortId": 5050,
  "status": "GENERATED",
  "voided": false,
  "cardNumber": 3973,
  "expireDate": null,
  "description": "Success",
  "customerCode": "858585",
  "paymentMethod": "cash",
  "changeDatetime": null,
  "createDatetime": 000000000,
  "reservationCode": "202020DD",
  "authorizationCode": "D8787"
},
{
  "id": "d50",
  "type": "passed",
  "amount": 100,
  "fortId": 5050,
  "status": "GENERATED",
  "voided": false,
  "cardNumber": 3973,
  "expireDate": null,
  "description": "Success",
  "customerCode": "858585",
  "paymentMethod": "cash",
  "changeDatetime": null,
  "createDatetime": 000000000,
  "reservationCode": "202020DD",
  "authorizationCode": "D8787"
 }
 ],
 }

我尝试了以下四个选项,但其中 none 给出了对象的值:

SELECT info @> 'authorizations:[{amount}]'
FROM idv.reservations;

SELECT info -> 'authorizations:[{amount}]'
FROM idv.reservations;

info -> ''authorizations' ->> 'amount'
FROM idv.reservations

select (json_array_elements(info->'authorizations')->'amount')::int from idv.reservations

注意我正在使用 DBeaver

如果你想在“authorizations”JSON 数组中包含每个对象一行,以及相应的数量,你可以使用横向连接和 jsonb_array_elements():

select r.*, (x.obj ->> 'amount')::int as amount
from reservations r
cross join lateral jsonb_array_elements(r.info -> 'authorizations') x(obj)

我们也可以一次提取所有金额并将它们放入数组中,如下所示:

select r.*, 
    jsonb_path_query_array(r.info, '$.authorizations[*].amount') as amounts
from reservations r

Demo on DB Fiddlde