jsonb_each 访问对象内部的元素

jsonb_each to access elements inside objects

我有一个 JSON 列(称为“roi”),其中包含用户的 Instagram 表现。这是 roi 列:

{
"data": {
    "campaignName": "Master Cosy",
    "currency": "GBP",
    "reportData": {
        "AAAAAAAAAA": {
            "id": "0f20d833-d0f-bdb7-19",
            "name": "cornish_gregorys",
            "thumbnail": "https://sstagram.com/v/t51.2885-19/s320x320/87244862_1017848048596",
            "Name": "cornisorys",
            "instagramCount": 2319,
            "instagramEngagementFactor": 0,
            "instagramAuthorised": true,
            "hasPosts": true,
            "budget": 0,
            "derivedFee": 0,
            "inventoryItems": [],
            "trackedAssetsStats": {
                "totalAssets": 9,
                "facebook": {
                    "count": 0
                },
                "instagram": {
                    "total": 9,
                    "stories": 9,
                    "carousels": 0,
                    "videos": 0,
                    "images": 0,
                    "igtvs": 0
                },
        "BBBBBBBBBBBBB": {
            "id": "d3d30db4-0b453dfc3ae2a09",
            "name": "itssdha",
            "thumbnail": "https://in9809609728_n.jpg?_nc_ht=instagram.fhel5-1.fna.fbcdn.net&_nc_ohc=Se3ySAoqnFwAX4f6&oeF1623",
            "Name": "itsshdha",
            "instagramCount": 26700,
            "instagramEngagementFactor": 0,
            "instagramAuthorised": true,
            "hasPosts": true,
            "budget": 0,
            "derivedFee": 0,
            "inventoryItems": [],
            "trackedAssetsStats": {
                "totalAssets": 5,
                "facebook": {
                    "count": 0
                },
            "instagram": {
                "total": 9,
                "stories": 9,
                "carousels": 0,
                "videos": 0,
                "images": 0,
                "igtvs": 0}, etc.....

在“reportData”之后,我有用户的具体名称(在本例中为 AAAAAAAA 和 BBBBBBBBB)以及他们 Instagram 帐户的表现。如何在不输入特定用户名的情况下访问对象用户名中的所有指标(AAAAAAAA 和 BBBBBBBBB)

我的查询是这样的:

roi -> 'date' -> 'reportData' -> 'AAAAAAA' -> 'instagramCount' -> etc ....

但我需要'jump' 这部分 -> 'AAAAAAA' -> 并直接进入指标,在本例中 'instagramCount',等等...

根据我的阅读,我可能需要使用 jsonb_each,有人知道如何使用它吗?

demos:db<>fiddle

你有几种方法。

  1. 使用jsonb_each()扩展所有用户的数据:您可以为每个用户创建一条记录,然后再请求count

    SELECT
        users.value -> 'instagramCount'
    FROM
        mytable,
        jsonb_each(mydata -> 'data' -> 'reportData') as users
    
  2. 自 Postgres 12 起,您可以为此使用 JSONpath,以实现相同的目的:

    SELECT 
        jsonb_path_query(mydata, '$.**.instagramCount') 
    FROM mytable