簡體   English   中英

展開 Postgresql 嵌套數組 Json 字段

[英]Expand Postgresql Nested Array Json Field

我有一個表(log_table),在這個表中有一個嵌套數組 json 字段(活動)。 通過使用此活動字段,我想標准化我的行。

日志表:

- id:long
- activities:json
- date:timestamp

示例活動字段:

[ 
   { 
      "actionType":"NOTIFICATION",
      "items":null
   },
   { 
      "actionType":"MUTATION",
      "items":[ 
         { 
            "id":387015007,
            "name":"epic",
            "value":{ 
               "currency":"USD",
               "amount":1.76
            }
         },
         { 
            "id":386521039,
            "name":"test",
            "value":{ 
               "currency":"USD",
               "amount":1.76
            }
         }
      ]
   }
]

作為查詢,我試過:

select 
* 
from 
log_table l, 
json_array_elements(l.activities) elems,
json_array_elements(elems->'items') obj;

通過這個查詢,我得到如下錯誤:

ERROR:  cannot call json_array_elements on a scalar

有什么建議嗎?

缺少items應標記為[null] ,而不是null 您可以使用 case 表達式來更正此問題,例如:

select elems->>'actionType' as action_type, obj
from log_table
cross join jsonb_array_elements(l.activities::jsonb) elems
cross join jsonb_array_elements(case elems->'items' when 'null' then '[null]' else elems->'items' end) obj

 action_type  |                                       obj
--------------+---------------------------------------------------------------------------------
 NOTIFICATION | null
 MUTATION     | {"id": 387015007, "name": "epic", "value": {"amount": 1.76, "currency": "USD"}}
 MUTATION     | {"id": 386521039, "name": "test", "value": {"amount": 1.76, "currency": "USD"}}
(3 rows)    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM