You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL JSON列嵌套属性访问返回null,如何获取auth_type值?

解决MySQL JSON列中嵌套字符串JSON的提取问题

你的问题出在entries字段的存储形式上:它的值是字符串类型的JSON数组(被双引号包裹,内部还有转义的引号),而非原生的JSON数组。直接用JSON_EXTRACT(request, '$.entries[0].auth_type')会返回null,因为MySQL会把$.entries识别为字符串,而非可遍历的JSON结构。

正确的查询方式

需要先将entries的字符串内容解析为JSON,再提取目标字段,有两种简洁写法:

写法1:使用函数嵌套

SELECT 
  JSON_UNQUOTE(
    JSON_EXTRACT(
      JSON_PARSE(JSON_UNQUOTE(JSON_EXTRACT(request, '$.entries'))),
      '$[0].auth_type'
    )
  ) AS auth_type
FROM mytable 
WHERE JSON_EXTRACT(request, '$.entries') IS NOT NULL 
LIMIT 1;

写法2:使用->>运算符简化(推荐)

->>是JSON_UNQUOTE(JSON_EXTRACT())的简写,配合JSON_PARSE可以大幅简化语句:

SELECT 
  JSON_PARSE(request->>'$.entries')->>'$[0].auth_type' AS auth_type
FROM mytable 
WHERE request->>'$.entries' IS NOT NULL 
LIMIT 1;

步骤说明

  1. request->>'$.entries':提取并去除entries字段的外层引号,得到原始的JSON数组字符串([{"user_id":"31823","auth_type":"RFID"}])。
  2. JSON_PARSE(...):将上述字符串解析为原生JSON数组。
  3. ->>'$[0].auth_type':从解析后的JSON数组中提取第一个元素的auth_type字段,并去除引号。

内容的提问来源于stack exchange,提问作者Ryan Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:25:00