查询具有 json 对象数组的列时,JSON_CONTAINS 的 MySQL 语法错误

问题描述 投票:0回答:1

以下查询有什么问题。

SELECT *
  FROM contract
  WHERE application_id="abcdef"
    AND JSON_CONTAINS(contract_details, '{"name":"~!@#$$%%^&*())_+?><,./:\";\'{}||}{"}');

我收到如下错误。

SELECT * FROM contract where application_id="abcdef" and JSON_CONTAINS(contract_details, '{"name":"~!@#$$%%^&*())_+?><,./:\";\'{}||}{\"}')
 LIMIT 0, 10000 Error Code: 3141. Invalid JSON text in argument 2 to function json_contains: "Missing a comma or '}' after an object member." at position 34.   0.234 sec

我有一个包含 Json 对象数组的列,我想根据名称及其值选择记录

mysql mysql-workbench mysql-python mysql-json
1个回答
0
投票

JSON 确实无效。

mysql> select json_valid('{"name":"~!@#$$%%^&*())_+?><,./:\";\'{}||}{\"}') valid;
+-------+
| valid |
+-------+
|     0 |
+-------+

如果您需要在 SQL 字符串中使用文字反斜杠,则需要使用双反斜杠。

mysql> select json_valid('{"name":"~!@#$$%%^&*())_+?><,./:\\";\'{}||}{\"}') valid;
                                                          ^
+-------+
| valid |
+-------+
|     1 |
+-------+
© www.soinside.com 2019 - 2024. All rights reserved.