查询包含对象数组 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;
我有一个名为 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;