我的表中有一个JSON列,名为Source_Data,其结构如下:
{
"id": "1",
"submissions": [
{
"requestDateTime": 123,
"request": {},
"response": {
"result": "ACCEPTED",
"submissionId": "ABC"
}
},
{
"requestDateTime": 456,
"request": {},
"response": {
"result": "REJECTED",
"submissionId": "XYZ"
}
}
]
}
我希望读取submissions
数组中的最后一个元素,以及response
对象中result
的值。因此,所需的输出将被“拒绝”。
如果我尝试以下操作,MySQL不会 * 抛出错误:
SELECT
JSON_EXTRACT(Source_Data, CONCAT('$.submissions[', JSON_LENGTH(Source_Data ->> '$.submissions'), '].response.result')) AS Submission_Response
FROM test;
这显然是错误的,因为数组从0开始计数,所以我需要执行JSON_LENGTH(Source_Data ->> "$.submissions") - 1
,但这不起作用,并显示以下错误:
JSON路径表达式无效。错误在字符位置14附近。
一旦我添加了- 1
,查询就会中断。
因此,违规查询如下:
SELECT
JSON_EXTRACT(Source_Data, CONCAT('$.submissions[', JSON_LENGTH(Source_Data ->> '$.submissions') - 1, '].response.result')) AS Submission_Response
FROM test;
任何关于如何让这个工作的帮助将不胜感激,谢谢。我使用的MySQL版本5.7.25,所以不能使用'last'(我很喜欢)。
1条答案
按热度按时间eanckbw91#
我已经找出了这个错误的原因。我在表中有另一个记录,其
submissions
数组是空的。因此,在数组中检索条目的计算结果将是给予-1
,MySQL会对JSON路径中的破折号产生问题。因此,我将查询修改如下: