查询包含对象数组 returns 空值的 Postgresql JSON 列

Query of Postgresql JSON column containing array of objects returns nulls

我有一个名为 heart_rate_json 的 Postgresql table 和一个名为 data 的 JSON 列,其中包含这样一个对象数组:

[{
  "dateTime" : "01/24/15 21:07:45",
  "value" : {
    "bpm" : 70,
    "confidence" : 0
  }
},{
  "dateTime" : "01/24/15 21:08:30",
  "value" : {
    "bpm" : 64,
    "confidence" : 2
  }
 }]

当我运行这个查询希望提取数组对象值时:

SELECT 
data -> 'dateTime' AS datetime,
data -> 'value' ->> 'bpm' AS bpm,
data -> 'value' ->> 'confidence' AS confidence 
FROM heart_rate_json;

查询结果有三列,但所有值为[null]

选择 data 列会 return 结果包含整个对象数组:

SELECT data FROM heart_rate_json;

我在这里错过了什么?

您需要先将 JSON 数组扩展为一组 JSON 个元素(您可以使用:json_array_elements(json)):

SELECT 
      data -> 'dateTime' AS datetime,
      data -> 'value' ->> 'bpm' AS bpm,
      data -> 'value' ->> 'confidence' AS confidence 
FROM (SELECT json_array_elements(data) AS data FROM heart_rate_json) AS sq;