Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
展开Postgresql嵌套数组Json字段_Json_Postgresql - Fatal编程技术网

展开Postgresql嵌套数组Json字段

展开Postgresql嵌套数组Json字段,json,postgresql,Json,Postgresql,我有一个表log_表,在这个表中有一个嵌套的数组json字段activities。通过使用这个活动字段,我想规范化我的行 日志表: - id:long - activities:json - date:timestamp 示例活动字段: [ { "actionType":"NOTIFICATION", "items":null }, { "actionType":"MUTATION", "items":[

我有一个表log_表,在这个表中有一个嵌套的数组json字段activities。通过使用这个活动字段,我想规范化我的行

日志表:

- 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
有什么建议吗?

缺少项目应标记为[null],而不是null。您可以使用大小写表达式来更正此问题,例如:

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)    

谢谢你的回答;我也很好奇。我如何在这里为日志->活动->操作类型->id创建索引。这里没有可以使用的索引类型。