PostgreSQL - jsonb_each

2024-03-14

我刚刚开始在 postgres 上使用 jsonb,并在网上很难找到示例,因为它是一个相对较新的概念。我尝试使用 jsonb_each_text 打印出键和值表,但在单列中获取 csv。

我将下面的 json 保存为 jsonb 并用它来测试我的查询。

{
  "lookup_id": "730fca0c-2984-4d5c-8fab-2a9aa2144534",
  "service_type": "XXX",
  "metadata": "sampledata2",
  "matrix": [
    {
        "payment_selection": "type",
        "offer_currencies": [
            {
              "currency_code": "EUR",
              "value": 1220.42
            }
        ]
    }
  ]
}

我可以通过以下方式访问 Offer_currencies 数组

SELECT element -> 'offer_currencies' -> 0
FROM test t, jsonb_array_elements(t.json -> 'matrix') AS element
WHERE element ->> 'payment_selection' = 'type'

给出的结果为“{”value”:1220.42,“currency_code”:“EUR”}”,因此如果我运行以下查询,我会得到(我必须将“更改为”)

select * from jsonb_each_text('{"value": 1220.42, "currency_code": "EUR"}')

Key            | Value
---------------|----------
"value"        | "1220.42"
"currency_code"| "EUR"

所以使用上述理论我创建了这个查询

SELECT jsonb_each_text(data)
FROM (SELECT element -> 'offer_currencies' -> 0 AS data
  FROM test t, jsonb_array_elements(t.json -> 'matrix') AS element
  WHERE element ->> 'payment_selection' = 'type') AS dummy;

但这会在一列中打印 csv

record
---------------------
"(value,1220.42)"
"(currency_code,EUR)"

这里的主要问题是您选择整行作为列(PostgreSQL 允许这样做)。你可以用以下方法解决这个问题SELECT (jsonb_each_text(data)).* ....

But: don't SELECT设置返回函数,通常会导致错误(或意外结果)。相反,请使用 f.ex。LATERAL http://www.postgresql.org/docs/current/static/queries-table-expressions.html#QUERIES-LATERAL连接/子查询:

select first_currency.*
from   test t
     , jsonb_array_elements(t.json -> 'matrix') element
     , jsonb_each_text(element -> 'offer_currencies' -> 0) first_currency
where  element ->> 'payment_selection' = 'type'

Note: 中的函数调用FROM子句是隐含的LATERAL加入(此处:CROSS JOINs).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL - jsonb_each 的相关文章

随机推荐

  • 在故事板中设置的 UITableViewCell 的恢复 ID 和标识符之间有什么区别

    当我拖动一个UITableViewCell到 tableView 中storyboard 我发现检查器中有两个ID需要设置 一个是在身份检查器中 Restoration ID 另一个在属性检查器 身份 中 他们之间有什么区别 恢复 ID 用
  • FlagsAttribute 有什么用?

    下面的代码有什么区别 no Flags Public Enum MyEnum Monday 1 Tuesday 2 Wednesday 4 Thursday 8 End Enum and
  • 从 xhr 对象获取请求 url

    有没有办法从 xhr 对象中提取请求 url 我可以通过通道属性看到 firebug 中的 url 但你无法使用 javascript 查询它 使用以下 hack 不需要包装器 var xhrProto XMLHttpRequest pro
  • Microsoft Graph 身份验证

    我正在用 Python 构建一个应用程序 它可以从 Azure AD 检索数据 此数据可能需要应用程序权限或委派权限 我成功检索了仅需要应用程序权限的数据 但是 为了检索需要委托权限的数据 我尝试使用 OAuth2 是否可以使用 OAuth
  • 如何在 Java 中将 2010-12-15T16:26:49.841-08:00 转换为 GregorianCalendar? [复制]

    这个问题在这里已经有答案了 我有一个字符串日期 2010 12 15T16 26 49 841 08 00 我需要将其转换为Java中的GregorianCalendar 你怎么做到这一点 Jesper 的回答的解决方案 使用joda时间的
  • 如何在 Docker Python 镜像中安装 GDAL 库?

    我正在为我的 django 项目使用 python3 7 slim buster docker 映像 现在我想使用django的Geo功能 但看来我必须安装GDAL 因此 我执行 RUN apt get install gdal 并引发异常
  • JPA 是否支持映射到 sql 视图?

    我目前正在使用 Eclipselink 但我知道现在大多数 JPA 实现已经相当标准化 是否有一种将 JPA 实体映射到视图的本机方法 我不想插入 更新 但问题实际上是如何处理 Id 注释 JPA 世界中的每个实体都必须有一个 ID 字段
  • java中本地对象的内存管理

    如果我在类中有一个方法并且我在该方法中创建一个对象 那么该对象会被销毁并释放分配给它的内存吗 该方法完成后 eg public void drawFigure Paint paint new Paint paint setSomePrope
  • Vue-test-utils 包装器未定义

    我在 Jest 中有以下组件的测试套件 我已经成功地为其他几个遵循类似结构的组件编写了单元测试 import createLocalVue mount from vue test utils import Vuex from vuex im
  • python 基于部分字符串匹配合并两个 pandas 数据框

    我是 Python 新手 在连接两个 pandas 数据框时遇到很多麻烦 因为合并应该基于部分字符串匹配 进一步来说 我有一个名为的数据框df看起来像这样 writtenAt 2015 01 01T18 31 01 00 00 conten
  • Oracle sql 按当天对工作日进行排序

    我试图根据顺序对日期进行排序 周六 周日 周一 周二 周三 周四 周五 我正在尝试使用案例 select day CASE day WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 3 THEN 3 WHEN 4 THEN
  • Netsuite 脚本 beforeLoad 记录未被修改

    我试图在用户打开采购订单时修改它 这似乎是一个非常简单的例子 但似乎不起作用 在 GUI 中我没有看到 测试 备忘录 在脚本调试中 备注字段为空 由于调试 我知道脚本正在运行 Update Drop Ship PO with route I
  • Express Checkout 错误消息:“安全标头无效”

    我正在实施快速结帐在贝宝 前两步我没有问题SetExpressCheckout and GetExpressCheckout 但是当我使用DoExpressCheckout 我遇到错误 安全标头无效 API 凭证是相同的 我已经通过更改来修
  • ec2 每次启动时运行脚本

    我在这里关注了一些帖子 尝试在每次启动后 而不仅仅是第一次启动 在我的 ec2 实例上运行 python 或 shell 脚本 我已经尝试过 脚本用户 始终 到 etc cloud cloud cfg 文件 将脚本添加到 scripts p
  • 如何在纯 PHP 中执行 HTTP 重定向后获取最终 URL?

    我想做的是找出重定向后的最后 最终 URL 是什么 我不想使用 cURL 我想坚持使用纯 PHP 流包装器 现在我有一个网址 比方说http 域名 test http domain test 我使用 get headers 从该页面获取特定
  • 如何将变量传递给布局?

    我的应用程序布局有两个版本 它们仅在几行中有所不同 考虑以下示例 html head a lot of code here body some more code here if defined flag and flag true var
  • iOS 7.1:当应用程序在后台时获取核心运动数据(加速计、陀螺仪)

    我想知道当应用程序处于后台模式时如何继续接收运动传感器值 我意识到那里已经有几个帖子了 例如 我尝试过iPhone 上的 Nike GPS 如何在后台接收加速度计更新 https stackoverflow com questions 87
  • Bouncy Castle 在 CBC 模式下使用 AES 进行基于密码的加密

    我最近遇到了一段在 CBC 模式下使用 BouncyCastle 的 PBE 和 AES 的代码 PBEWithSHA1And256BitAES CBC BC public static final String ALGORITHM PBE
  • 给出很多间隔 [ai, bi],找到与最多间隔数相交的间隔

    给定很多间隔 ai bi 找到与间隔数量最多的间隔 我们能在 O nlogn 或更好的时间内做到这一点吗 我只能想到 n 2 方法 假设间隔给出为 a1 b1 an bn 制作一个长度已排序的数组2n关系被打破的地方 if ai aj 然后
  • PostgreSQL - jsonb_each

    我刚刚开始在 postgres 上使用 jsonb 并在网上很难找到示例 因为它是一个相对较新的概念 我尝试使用 jsonb each text 打印出键和值表 但在单列中获取 csv 我将下面的 json 保存为 jsonb 并用它来测试