JSON_EXTRACT返回数组,如何提取其中的单个值?
提取JSON字段中的单个值
你的问题根源在于使用了$**递归通配符——它会匹配所有层级的指定键,哪怕只有一个匹配结果,也会返回数组格式。要拿到不带括号和引号的单个值,可以试试下面几种方法:
方法1:使用精确JSON路径(推荐)
既然你清楚JSON的明确结构,直接指定完整路径就能获取单个值,无需通配符:
-- 方式1:用->>运算符(自动去除引号) SELECT userData->>'$.users.user.UserId' as UserId FROM userTable; SELECT userData->>'$.users.user.FirstName' as FirstName FROM userTable; -- 方式2:用JSON_EXTRACT+JSON_UNQUOTE组合 SELECT JSON_UNQUOTE(JSON_EXTRACT(userData, '$.users.user.UserId')) as UserId FROM userTable;
这两种写法都会直接返回26933或John,完全符合你的需求。
方法2:如果必须用通配符(不推荐)
要是因为特殊场景不得不使用$**,可以在路径末尾加[0]提取数组的第一个元素,再配合去引号操作:
SELECT userData->>'$**.UserId[0]' as UserId FROM userTable; SELECT JSON_UNQUOTE(JSON_EXTRACT(userData, '$**.FirstName[0]')) as FirstName FROM userTable;
内容的提问来源于stack exchange,提问作者RGriffiths
相关产品推荐
相关产品推荐

