问题描述:新版本中引入的json数据检索时获取某字段值时带引号
场景:
查看mysql版本: select version();
数据库数据:tabel表中data 字段中的数据
数据取出后格式化如下(假数据):
{
"address": {
"zip": "29730",
"city": "Rock Hill",
"state": "South Carolina",
"detail": "301 S Jones Ave,Rock Hill,SC 29730,US",
"street": "301 S Jones Ave",
"telnum": "7042221086",
"company": "CCTV VERA",
"country": "US",
"street2": "",
"firstName": "Francisco Vera"
}
}
目标是取address中的detail数据,有两种方法
一:
select data->'$.address.detail' from tabel ;
得到 "301 S Jones Ave,Rock Hill,SC 29730,US"
二:
select JSON_EXTRACT(data,'$.address.detail') from tabel;
得到 "301 S Jones Ave,Rock Hill,SC 29730,US"
问题:如上,无论哪种方法得到的数据都是带有双引号的,这时候的数据就不能正常做对比
可以使用 JSON_UNQUOTE函数将双引号去除
select JSON_UNQUOTE(JSON_EXTRACT(data,'$.address.detail')) from tabel;
select JSON_UNQUOTE(data->'$.address.detail') from tabel ;
都得到 301 S Jones Ave,Rock Hill,SC 29730,US
目标完成
注:此时获取的数据用来做比较 有时候会出现类型不统一,使用 CAST(xx as CHAR) 将数据转为字符类型进行处理
PS:
更简单粗暴的方法是
select data->> '$.address.detail' from tabel ;
直接得到 301 S Jones Ave,Rock Hill,SC 29730,US