【发布时间】:2020-10-06 23:04:07
【问题描述】:
我想使用计数器循环遍历 mysql 中的 JSON 数据,但我不断收到此错误:
"code": "ER_INVALID_JSON_PATH",
"errno": 3143,
"sqlMessage": "Invalid JSON path expression. The error is around character position 2.",
"sqlState": "42000",
"index": 0,
来自 created_slots 的示例表。它是一个包含时间的 JSON 数组 这是我从 Postman 得到的响应:
"slots": "[\"11:00:00.000000\", \"12:00:00.000000\", \"12:30:00.000000\", \"13:00:00.000000\", \"13:30:00.000000\", \"14:00:00.000000\", \"14:30:00.000000\", \"15:00:00.000000\", \"15:30:00.000000\", \"16:00:00.000000\", \"16:30:00.000000\", \"17:00:00.000000\", \"17:30:00.000000\"]"
注意:created_slots 是一个 JSON 数组
看来计数器不是有效的参考。有没有办法在字符串中解析它。 这是我下面的代码:
IF c_time > start_time THEN
removal_loop : LOOP
IF JSON_EXTRACT(created_slots, '$[loop_counter]') <> 0 THEN
IF JSON_EXTRACT(created_slots, '$[loop_counter]') < c_time THEN
SET created_slots = JSON_REMOVE(created_slots, '$[loop_counter]');
SET loop_counter = loop_counter + 1;
ELSE
SET loop_counter = loop_counter + 1;
END IF;
ELSE
LEAVE removal_loop;
END IF;
END LOOP removal_loop;
END IF;
替代解决方案:
IF JSON_EXTRACT(m_begin, '$[*]') < c_time THEN
SET created_slots = JSON_REMOVE(m_begin, '$[refernece to current item]')
... remove here, but I can't use this line of code because everything
will be deleted. I need a reference to the item that is less than
c_time
【问题讨论】:
-
请向我们展示 created_slots 的示例。在您的情况下错误的路径基本上是文本,因此您可以将变量连接到它,但为此您的 json 必须正确
-
在这里发帖时请不要大喊大叫。全部大写的文本更难阅读和理解,并且不会更快地为您提供帮助。当您寻求免费帮助时,来到这里对我们大喊大叫也是相当不礼貌的。谢谢。
-
@nbk 请查看编辑后的帖子。当我离开 mysql 工作台时,我的坏人忘记关掉我的帽子
-
那不是有效的json,请看是否可以创建一个只有一行的dbfiddle
-
@nbk 抱歉,这是我在测试 api 时从邮递员那里得到的回复。上面的代码是对 API 调用的函数的修改。请参阅我建议的替代解决方案。如果能实现就更简单了。