【问题标题】:json_search throwing an error MySQL - #2014 - Commands out of sync; you can't run this command nowjson_search 抛出错误 MySQL - #2014 - 命令不同步;你现在不能运行这个命令
【发布时间】:2018-05-24 21:59:09
【问题描述】:

我正在使用 json_search 从列中搜索 json 格式的数据。对于普通的 json 数据,它工作正常。但如果字符串有双引号,它就不起作用。

MySQL 查询

SELECT JSON_SEARCH(user_information, 'one', '%name%', null, '$[*].label');

常规 json 数据可以正常工作,但不能用于存储在单列数据库中的以下数据。

查询不起作用的数据示例:

[{ 
  "name":"John Smith",
  "value":"John",
  "label":"Sm"ith"
}]


这是此示例的db-fiddle

正如您在数据中看到的,对于标签键,字符串是sm"ith,我刚刚在字符串中间添加了一个双引号,然后它在 db-fiddle 上显示以下错误。

函数 json_search 的参数 1 中的 JSON 文本无效:“缺少一个 对象成员后的逗号或 '}'。"

但在我的本地主机上显示以下错误。


2014 - 命令不同步;你现在不能运行这个命令

【问题讨论】:

  • 我无法重现该问题,请参阅db-fiddle
  • @wchiquito 我已经重现了这个问题,不是因为特殊字符,而是由于在字符串中添加了双引号。我已经更新了这个问题。我也创建了 db-fiddle,这里是链接db-fiddle.com/f/8T39N3B4R8jZgn3vyG6cCQ/0

标签: mysql json


【解决方案1】:

您必须使用双反斜杠转义序列,请参阅Creating JSON Values

mysql> SELECT JSON_VALID('
    '> [
    '>   { 
    '>     "name":"John Smith",
    '>     "value":"John",
    '>     "label":"Sm"ith"
    '>   }
    '> ]
    '> ') `is_json_valid?`;
+----------------+
| is_json_valid? |
+----------------+
|              0 |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT JSON_VALID('
    '> [
    '>   { 
    '>     "name":"John Smith",
    '>     "value":"John",
    '>     "label":"Sm\\"ith"
    '>   }
    '> ]
    '> ') `is_json_valid?`;
+----------------+
| is_json_valid? |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

【讨论】:

  • 谢谢@wchiquito ...!它工作正常,但是有什么方法可以从 mysql 查询中生成格式良好的 json?
  • @Onkar:来自 mysql 查询?你能提供更多细节吗?。
  • @wciquito 你已经给出了检查 json 是否有效的解决方案。但我想更深入。我想验证我可以在上面的查询中使用的 json,但是如果它返回 0 即 json 无效,那么我想让该 json 格式正确,即要在同一查询中为该行的该行添加 \\ 。我应该创建一个新问题来详细解释 eg 吗?
  • @Onkar:一个新问题将是正确的事情,给出你需要的细节和例子。
猜你喜欢
  • 2021-06-11
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多