sql - JSON数据库表查询
问题描述
我有一些对象的 JSON 表,我正在尝试查询对象中的金额值
{
"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"
}
],
}
我尝试了以下四个选项,但这些选项都没有给我对象的值:
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
解决方案
如果您希望“授权” 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
推荐阅读
- http - 了解 OData 服务
- blockchain - 如何使用 web3 处理 Solidity uint 数组
- javascript - 如何在不调整reactjs中的背景图像大小的情况下进行缩放
- java - 在 openxmlformats 中更改图表的轴颜色和字体
- rx-java - RxJava Scheduler.Worker schedule 订阅 Observable 的操作
- android - 带有 2 个 Fragment 屏幕的 Google play 游戏服务
- php - 当我打电话给她 7.0 时,我的函数的参数很少
- python - Python动态创建xml文件
- python - 如何细分熊猫数据框
- windows - 如何将 %userprofile% 放入 puppet exec